简介#
ABP 的权限管理非常全面,包括接口访问、页面访问、菜单、局部渲染、JavaScript 等,下面介绍了 ABP 权限的所有使用场景。
权限定义变更#
- 修改
*.Application.Contracts\\Permissions\\*PermissionDefinitionProvider
内容以变更权限定义 - 运行
*.DbMigrator
项目会自动向 "admin" 角色授予新权限 (granted to the admin role)
接口鉴权#
如果仅允许登录后用户访问,在 Service 上添加 [Authorize]
标记即可。
如果是对 Abp 的 CRUD 函数鉴权,直接在 Service 实现类的 constructor 中添加如下内容:
// 注意:赋值语句后的 Permission Policy 根据实际情况修改
GetPolicyName = *Permissions.RemoteServersConfiguration.Default;
GetListPolicyName = *Permissions.RemoteServersConfiguration.Default;
CreatePolicyName = *Permissions.RemoteServersConfiguration.Create;
UpdatePolicyName = *Permissions.RemoteServersConfiguration.Edit;
DeletePolicyName = *Permissions.RemoteServersConfiguration.Delete;
如果是对自定义的函数鉴权,有两种方式鉴权,其中的 Permission Policy 根据实际情况修改:
- 是在函数内调用
await CheckPolicyAsync(GetListPolicyName);
- 在方法签名上添加
[Authorize(GetListPolicyName)]
标记
网站左侧菜单 (Sidebar) 鉴权#
在网站左侧菜单中显示或隐藏菜单,即对菜单鉴权:
- 找到
*.Web\Menus\*MenuContributor.ConfigureMainMenuAsync()
- 定义菜单 metadata
- 在菜单上调用
.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 Server Side Render 鉴权#
对页面进行鉴权后,页面内服务器渲染的内容也需要鉴权,即只允许使用页面内有权使用的功能:
-
在 Razor Pages 页面内添加
@inject IAuthorizationService AuthorizationService
以注入鉴权服务 -
在需要鉴权的服务器渲染内容外添加以下鉴权代码,其中的 Permission Policy 根据实际情况修改:
@if (await AuthorizationService.IsGrantedAsync(*Permissions.RemoteServersConfiguration.Create)) { <p>hi</> }
JavaScript 鉴权#
即使对 Server Side Render 内容鉴权后,仍不能真正的保护应用,因为有些内容是通过 JavaScript 动态加载的,这部分需要用 JavaScript 来鉴权:
-
打开需要鉴权的 JavaScript 代码,添加以下鉴权代码,其中的 Permission Policy 根据实际情况修改:
abp.auth.isGranted('*.RemoteServers.Configuration.Edit')