Module Zero之权限管理

简介:

概览介绍

Module-Zero实现了ABP授权系统的IPermissionChecker接口。这篇文章中,我们将会看到如何给角色和用户授予权限。要定义和检查权限,请转至《ABP理论学习之授权(Authorization)》

角色权限

如果我们给一个角色授予一个权限,那么这个角色的所有用户都授权了该权限(除非对于一个特定的用户显示禁止)。

我们使用RoleManager改变一个角色的权限。比如,SetGrantedPermissionsAsync可以在一个方法调用中改变一个角色的所有权限:

public class RoleAppService : IRoleAppService
{
    private readonly RoleManager _roleManager;
    private readonly IPermissionManager _permissionManager;

    public RoleAppService(RoleManager roleManager, IPermissionManager permissionManager)
    {
        _roleManager = roleManager;
        _permissionManager = permissionManager;
    }

    public async Task UpdateRolePermissions(UpdateRolePermissionsInput input)
    {
        var role = await _roleManager.GetRoleByIdAsync(input.RoleId);
        var grantedPermissions = _permissionManager
            .GetAllPermissions()
            .Where(p => input.GrantedPermissionNames.Contains(p.Name))
            .ToList();

        await _roleManager.SetGrantedPermissionsAsync(role, grantedPermissions);
    }
}

这个例子中,我们获得了一个RoleId和授予权限的名称列表(input.GrantedPermissionNames是List类型)。我们使用IPermissionManager根据名字找到所有的“权限”对象。然后我们调用SetGrantedPermissionsAsync方法来更新角色的权限。

也有其他方法来一个个地控制权限,如GrantPermissionAsyncProhibitPermissionAsync

用户权限

虽然对于大多说应用来说,基于角色的权限管理可能足够了,但我们可能控制每个用户的权限。当我们为一个用户定义一个权限设置时,它就重写了来自该用户角色的权限设置。

比如有这么个例子,假设我们有一个应用服务,该服务对于某个用户是没有使用权限的:

public class UserAppService : IUserAppService
{
    private readonly UserManager _userManager;
    private readonly IPermissionManager _permissionManager;

    public UserAppService(UserManager userManager, IPermissionManager permissionManager)
    {
        _userManager = userManager;
        _permissionManager = permissionManager;
    }

    public async Task ProhibitPermission(ProhibitPermissionInput input)
    {
        var user = await _userManager.GetUserByIdAsync(input.UserId);
        var permission = _permissionManager.GetPermission(input.PermissionName);

        await _userManager.ProhibitPermissionAsync(user, permission);
    }
}

用户管理者(User Manager)有许多控制用户权限的方法。在例子中,我们获得了UserIdPermissionName,并使用ProhibitPermissionAsync方法禁止一个用户拥有某个权限。

当我们禁止某个用户拥有某个权限时,即使ta的角色授予了该权限,Ta也没有获得这个权限的授权。当我们特别给某个用户授予权限时,即使该用户的角色没有授予权限,那么该用户也得到了该权限的授权。我们可以使用ResetAllPermissionsAsync为用户删除所有的用户特定的权限设置。





本文转自tkbSimplest博客园博客,原文链接:本文转自tkbSimplest博客园博客,原文链接:XXXXXXXX,如需转载请自行联系原作者,如需转载请自行联系原作者


目录
相关文章
|
5月前
|
前端开发
平台设计-moduleID的使用
整个平台上有很多相同的功能
|
12月前
|
SQL API Go
保持 Modules 的兼容性(上)
保持 Modules 的兼容性
23 0
|
前端开发 JavaScript 计算机视觉
Module Federation最佳实践
Module Federation[1]官方称为模块联邦,模块联邦是webpack5支持的一个最新特性,多个独立构建的应用,可以组成一个应用,这些独立的应用不存在依赖关系,可以独立部署,官方称为微前端。
597 0
Module Federation最佳实践
|
JavaScript 前端开发 API
【ES6】Module模块详解
【ES6】Module模块详解
215 0
|
Web App开发 测试技术 数据中心
Terraform Module 编写指南
Module 是一个Terraform 模板,是对多个子节点,子资源,子架构模板的组合和抽象。利用Module 在降低模板编写和维护复杂度的同时,使得模板结构更加简洁清楚。为什么要使用 Module,详见文章[ Module 让 Terraform 使用更简单](https://www.atatech.org/articles/119465)。
7785 0
ES6(Module 模块化)
模块化 ES6的模块化的基本规则或特点: 1:每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件,直接从内存中读取。
999 0