myesn

myEsn2E9

hi
github

ABP 权限

简介#

ABP 的权限管理非常全面,包括接口访问、页面访问、菜单、局部渲染、JavaScript 等,下面介绍了 ABP 权限的所有使用场景。

权限定义变更#

  1. 修改 *.Application.Contracts\\Permissions\\*PermissionDefinitionProvider 内容以变更权限定义
  2. 运行 *.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) 鉴权#

在网站左侧菜单中显示或隐藏菜单,即对菜单鉴权:

  1. 找到 *.Web\Menus\*MenuContributor.ConfigureMainMenuAsync()
  2. 定义菜单 metadata
  3. 在菜单上调用 .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')    
    
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。