ホームページ  >  記事  >  バックエンド開発  >  Beego の権限制御 - Web アプリケーションをより安全にします

Beego の権限制御 - Web アプリケーションをより安全にします

PHPz
PHPzオリジナル
2023-06-23 13:09:101610ブラウズ

Beego は Go 言語をベースにした Web フレームワークで、効率的で安全な Web アプリケーションを開発するための便利で高速なツールを提供します。 Web アプリケーションを開発する場合、セキュリティは非常に重要な側面です。この記事では、Beego を使用してアクセス許可制御を実装し、Web アプリケーションを保護し、より安全にする方法を紹介します。

権限制御とは何ですか?

アクセス許可制御は、Web アプリケーションでユーザーを認証および許可するテクノロジーです。ユーザーが特定の機密ページにアクセスしたり、データの追加、変更、削除などの特定の機密操作を実行したりすることを制限できます。アクセス許可制御は、権限のないユーザーによる望ましくないアクションの実行を防止して、Web アプリケーションのセキュリティを保護する方法です。一部の特に機密性の高い操作については、システム管理者やパワー ユーザーなど、特定のユーザー ロールからの承認が必要です。アクセス許可制御テクノロジを使用すると、この要件を Web アプリケーションに実装できます。

Beego の権限制御モジュール

Beego では、beego.Acl モジュールを使用して権限制御を実装できます。このモジュールは、ユーザーがアクセスできるさまざまなレベルのページとリソースを制御するためのさまざまなユーザー ロールを承認できる、マルチレベルの権限制御システムを提供します。これには次のような特徴があります。

  1. マルチレベルの権限制御: 一般ユーザーや管理者などのユーザー ロールのマルチレベル権限をサポートします。
  2. 使い方は簡単: アプリケーションでユーザー ロールと対応する権限を定義するだけで使用できます。
  3. コードとテンプレートの両方に適用: ユーザー権限はコードとテンプレートを通じて制御できます。
  4. 拡張性: 新しいユーザーの役割と権限を自由に定義できます。

Beego でのアクセス許可制御の実装

簡単な例を使用して、Beego を使用してアクセス許可制御を実装する方法を示します。管理者と一般ユーザーの 2 つの役割を持つユーザー情報管理システムがあるとします。管理者はユーザー情報の追加、変更、削除が可能ですが、一般ユーザーは情報の閲覧のみが可能です。

まず、アプリケーションの初期化コードでユーザーの役割、権限、認可を定義する必要があります。 Beego の Init 関数を通じて定義されます。コードは次のとおりです。

func init() {
    //admin role
    beego.Acl.AddRole("admin")

    //normal role
    beego.Acl.AddRole("normal")

    //user info resource
    beego.Acl.AddResource("/admin/user", "GET", "POST", "DELETE")

    //set role auth
    beego.Acl.AddRoleForUser("admin", "admin")
    beego.Acl.AddRoleForUser("normal", "normal")

    //set auth for role and resource
    beego.Acl.Allow("admin", "/admin/user", "*")
    beego.Acl.Deny("normal", "/admin/user", "POST", "DELETE")
}

このコードでは、管理者と通常の 2 つのユーザー ロールを定義します。また、リソース、ユーザー情報 (/admin/user) を定義し、そのアクセス方法 (GET、POST、DELETE) を制限しました。次に、adminとnormalにそれぞれ対応するロールを設定し、権限を与えます。管理者ロールにはユーザー情報リソースに対する完全な権限を付与できますが、通常のロールがリソースに対して POST および DELETE リクエストを行うことは禁止されています。ここでは、# 記号を使用して完全な権限を示します。

次に、コントローラーで Beego の AC インターフェイスを使用して、ユーザーの権限を制御します。コードは次のとおりです。

func (c *UserController) List() {
    if beego.Acl.HasRole(c.GetSession("username").(string), "admin") {
        // get userlist
    } else {
        c.Data["error"] = "permission denied"
        c.TplName = "error.html"
    }
}

func (c *UserController) Add() {
    if beego.Acl.HasPermission(c.GetSession("username").(string), "/admin/user", "POST") {
        // add user
    } else {
        c.Data["error"] = "permission denied"
        c.TplName = "error.html"
    }
}

func (c *UserController) Delete() {
    if beego.Acl.HasPermission(c.GetSession("username").(string), "/admin/user", "DELETE") {
        // delete user
    } else {
        c.Data["error"] = "permission denied"
        c.TplName = "error.html"
    }
}

実際、コントローラーは beego.ACLer インターフェイスを実装しているため、権限制御に beego.Acl を直接使用できます。この例では、現在のユーザーが適切な権限を持っているかどうかを確認します。現在のユーザーが管理者ロールを持っている場合は、/api/user/ へのアクセスを許可します。それ以外の場合は、エラー メッセージが返されます。

最後に、対応するテンプレート (user.tpl など) で権限の判断をレンダリングする必要があります。コードは次のとおりです。

{{if beego.Acl.HasPermission .username "/admin/user" "POST"}}
    <a href="#">Add User</a>
{{end}}

{{if beego.Acl.HasPermission .username "/admin/user" "DELETE"}}
    <a href="#">Delete User</a>
{{end}}

この例では、beego.Acl.HasPermission 関数を使用して、現在のユーザーに POST または DELETE 操作のアクセス許可があるかどうかを確認します。存在する場合、対応するアクション ボタンが表示されます。テンプレートで ac 関数を使用するには、現在のユーザーのユーザー名をコントローラーで渡す必要があることに注意してください。

概要

この例では、Beego を使用してアクセス許可制御を実装し、Web アプリケーションを保護し、より安全にする方法を示します。 Beego は、ユーザーの役割、権限、承認を簡単に定義し、コントローラーやテンプレートで使用できるようにする、非常にシンプルで使いやすい API を提供します。もちろん、これは単なる例であり、実際のニーズに応じて使用できます。

以上がBeego の権限制御 - Web アプリケーションをより安全にしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。