紹介#
ABP の権限管理は非常に包括的であり、インターフェースのアクセス、ページのアクセス、メニュー、部分レンダリング、JavaScript などを含みます。以下では、ABP の権限のすべての使用シナリオについて説明します。
権限の定義の変更#
*.Application.Contracts\\Permissions\\*PermissionDefinitionProvider
の内容を変更するために修正します。*.DbMigrator
プロジェクトを実行すると、"admin" ロールに新しい権限が自動的に付与されます。
インターフェースの認証#
ログイン後のユーザーのアクセスのみを許可する場合は、サービスに[Authorize]
タグを追加するだけで済みます。
ABP の CRUD 関数の認証を行う場合は、サービスの実装クラスのコンストラクタに以下の内容を追加します。
// 注意:実際の状況に応じて、代入文の後のPermission Policyを変更してください
GetPolicyName = *Permissions.RemoteServersConfiguration.Default;
GetListPolicyName = *Permissions.RemoteServersConfiguration.Default;
CreatePolicyName = *Permissions.RemoteServersConfiguration.Create;
UpdatePolicyName = *Permissions.RemoteServersConfiguration.Edit;
DeletePolicyName = *Permissions.RemoteServersConfiguration.Delete;
カスタム関数の認証を行う場合は、2 つの方法があります。以下の Permission Policy は実際の状況に応じて変更してください。
- 関数内で
await CheckPolicyAsync(GetListPolicyName);
を呼び出す - メソッドのシグネチャに
[Authorize(GetListPolicyName)]
タグを追加する
ウェブサイトのサイドバーの認証#
ウェブサイトのサイドバーメニューに表示または非表示のメニューを設定するには、メニューの認証を行います。
*.Web\Menus\*MenuContributor.ConfigureMainMenuAsync()
を見つけます。- メニューメタデータを定義します。
- メニュー内で
.RequirePermissions(*Permissions.RemoteServersBoard.Default)
を呼び出します。この関数内の Permission Policy は実際の状況に応じて調整してください。
Razor Pages の認証#
メニューの認証だけではページを本当に保護することはできません。ブラウザで直接パスを入力してもページにアクセスできるため、ページの認証も行う必要があります。
-
*.Web\*WebModule.ConfigureServices()
を見つけ、Configure<RazorPagesOptions>
のコードに移動します。 -
現在の設定を参考に、以下のコードを追加してページのパスを認証します。ページのパスと Permission Policy は実際の状況に応じて変更してください。
options.Conventions.AuthorizePage("/RemoteServers/Board/Remote", *Permissions.RemoteServersBoard.Remote);
Razor Pages サーバーサイドレンダリングの認証#
ページの認証を行った後、ページ内でサーバーサイドレンダリングされるコンテンツも認証する必要があります。つまり、ページ内で使用できる機能に対してのみアクセスを許可します。
-
Razor Pages のページに
@inject IAuthorizationService AuthorizationService
を追加して認証サービスを注入します。 -
認証が必要なサーバーサイドレンダリングコンテンツの外側に以下の認証コードを追加します。Permission Policy は実際の状況に応じて変更してください。
@if (await AuthorizationService.IsGrantedAsync(*Permissions.RemoteServersConfiguration.Create)) { <p>hi</> }
JavaScript の認証#
サーバーサイドレンダリングのコンテンツを認証したとしても、アプリケーションを本当に保護することはできません。なぜなら、一部のコンテンツは JavaScript で動的にロードされるため、JavaScript で認証する必要があるからです。
-
認証が必要な JavaScript コードを開き、以下の認証コードを追加します。Permission Policy は実際の状況に応じて変更してください。
abp.auth.isGranted('*.RemoteServers.Configuration.Edit')