2.1、权限菜单处理

 1、.Core  ->  Authorization  ->  PermissionNames.cs 这里新增权限项,可以具体到按钮(即方法名)

 

2、.Core  》 Authorization  》FrameworkAuthorizationProvider.cs 这里创建权限,这样在页面中添加角色的时候才能显示出来

      项目运行之后,程序会自动给管理员的1.2角色创建对应的菜单

context.CreatePermission(PermissionNames.Pages_Users_ChangeOnline, L("ChangeOnline"));

 

IPermissionDefinitionContext有创建和获取权限的方法。一个权限定义了一些属性: 

  • Name:系统中 唯一的名字。最好为权限的名字定义一个const字符串而不是变量字符串。我们偏向使用“.”符号用于有层次的名字,但这不是强制的。你可以设置任何你喜欢的名字,唯一的一点是保证它必须是唯一的。
  • DisplayName:用于以后在UI上显示权限的本地化字符串。
  • Description:用于以后在UI上显示权限定义的本地化字符串。
  • IsGrantedByDefault:表示该权限是否授予给所有登录的用户,除非该权限显式禁止未授予给用户。该值一般默认为false。
  • MultiTenancySides:对于多租户应用,租户或者租主可以使用同一个权限。这是一个Flags枚举,因此一个权限可以用于租户和租主。
  • dependedFeature:可以用于声明一个功能的依赖。因此,只有功能依赖满足了,该权限才会被授予。

  

3、具体方法的权限控制

  3.1、方法上,加上[AbpAuthorize(PermissionNames.Pages_Users_ChangeOnline)]

  3.2、类上加, [AbpAuthorize(PermissionNames.Pages_Users)]

AbpAuthorize特性需要注意的地方:

ABP对于授权使用了强大的动态方法拦截(interception)。因此,使用AbpAuthorize特性有一些限制:

  • 不能用于私有方法。
  • 不能用于静态方法。
  • 不能用于非注入类的方法(我们必须要使用依赖注入)。

  

4、 创建带有该按钮功能的角色,或者修改角色,使角色带有该菜单的功能

  看Role/Create或者 Role/Update 中的grantedPermissions中填上要赋予的权限菜单就可以

  

5、使用IPermissionChecker验证权限

虽然AbpAuthorize特性对于大多数情况相当够用了,但是肯定存在我们会在一个方法体内检查权限的情况。我们可以注入并使用IPermissionChecker。可以看见有两个方法提供使用。

1 public interface IPermissionChecker
2 {
3     Task<bool> IsGrantedAsync(string permissionName);
4     Task<bool> IsGrantedAsync(UserIdentifier user, string permissionName);
5 }

在ApplicationService基类注入并定义了PermissionChecker属性。这样,权限检查者不需要在应用服务类中注入就可以使用了。

 

posted @ 2020-02-29 19:40  殇琉璃  阅读(311)  评论(0编辑  收藏  举报