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,如需转载请自行联系原作者,如需转载请自行联系原作者


目录
相关文章
|
机器学习/深度学习 算法 数据库
KNN和SVM实现对LFW人像图像数据集的分类应用
KNN和SVM实现对LFW人像图像数据集的分类应用
285 0
|
安全 数据安全/隐私保护
|
JavaScript
vue组件通信及eventBus销毁、侦听处理
vue组件通信及eventBus销毁、侦听处理
252 0
|
Kubernetes 监控 调度
Kubernetes(K8s)与虚拟GPU(vGPU)协同:实现GPU资源的高效管理与利用
本文探讨了如何使用Kubernetes和虚拟GPU(vGPU)实现异构GPU的协同调度。Kubernetes是一个容器编排平台,通过设备插件、资源规格、调度器扩展和节点标签实现GPU资源管理。vGPU技术允许物理GPU资源在多个虚拟机或容器中共享。文章详细介绍了vGPU的部署配置步骤,并提出了GPU资源调度、负载均衡和监控调优的方法。强调虚拟GPU的性能取决于硬件和驱动支持,合理配置能提供高性能计算环境。参考文献包括Kubernetes和NVIDIA官方文档及相关研究论文。
|
存储 前端开发 Linux
NetCore开发的分布式文件上传系统
一个基于.Net Core构建的简单、跨平台分布式文件上传系统,支持分块上传、多个项目同时上传、接口权限控制采用JWT机制。
294 0
NetCore开发的分布式文件上传系统
|
Linux
Linux nohup 后台运行脚本
Linux nohup 后台运行脚本
394 0
|
双11 Android开发
Android动态来改变App桌面图标
其实对于这样的一个桌面图标更换,Android中为我们提供了AndroidManifest.xml里的<activity-alias>标签实现方式。
626 0
|
机器学习/深度学习 存储 人工智能
《2023云原生实战案例集》——01 汽车/制造——VIVO AI计算平台的ACK One混合云实践
《2023云原生实战案例集》——01 汽车/制造——VIVO AI计算平台的ACK One混合云实践
|
测试技术 C++ 芯片
崮德好文连载 - 8个影响我职业生涯的重要技能
们的教育方式,注定了大部分人都是解决问题的高手,每次考试,我们的目标就是拿100分,从ABCD中选择中选择正确的答案,反而很少有人想,我们为什么要学这些知识,这些知识未来有什么用?或者想想这个数学公式是怎么来?有没有更简洁的表达方式呢?有没有其他没有发现的更好的解决方案呢?或者怎么提高学习效率?怎么让自己既学的好,又学的轻松呢?在我整个学生生涯,我的脑子里整天充满了这些问题,我觉得就是这样的思考习惯,让我成为一个善于提出问题的“好”学生。
崮德好文连载 - 8个影响我职业生涯的重要技能
|
算法
带你读《2022技术人的百宝黑皮书》——淘宝直播端到端音视频评测方案首次公开(6)
带你读《2022技术人的百宝黑皮书》——淘宝直播端到端音视频评测方案首次公开(6)
129 0