返回《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为用户删除所有的用户特定的权限设置。

Module Zero之权限管理的更多相关文章

  1. Android权限管理之RxPermission解决Android 6.0 适配问题

    前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...

  2. Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...

  3. 尝试封装适用于权限管理的通用API

    谈谈我对权限系统的简单理解 最近一段时间在研究权限系统,在园子里看到个很牛逼的开源的基于DDD-Lite的权限管理系统,并有幸加入了作者的QQ群,呵呵,受到了很大的影响.对于权限管理我有我自己的一些简 ...

  4. MVC中权限管理

    权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少.权限管理几乎出现在任何系统里面,只要有用户和密码的系统.权限管理还是比较复杂的,有的固定到某个模 ...

  5. 用最基本的EF+MVC+JQ+AJAX+bootstrap实现权限管理的简单实例 之登陆和操作权限

    先来一堆关于上篇文章的废话(不喜者点此隐藏) 今天把博客加了个小功能,就是点标题可以隐藏或展示相关内容,做法很傻,就是引用了bootstrap的两个css类和全部的js文件,其实这样的小功能完全应该自 ...

  6. [转]java web简单权限管理设计

    原文地址:http://blog.csdn.net/zwx19921215/article/details/44467099 最近在做一个网站类型项目,主要负责后台,ui框架选型为jquery eas ...

  7. Spark SQL Thrift Server 配置 Kerberos身份认证和权限管理

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 之前的博客介绍了通过Kerberos + Sentry的方式实现了hive server2的身份认证和权限管理功能,本文主 ...

  8. 【源码笔记】BlogEngine.Net 中的权限管理

    BlogEngine.Net 是个功能点很全面的开源博客系统,容易安装和实现定制,开放接口支持TrackBack,可以定义主题配置数据源等等.可谓五脏俱全,这里先记录一下它基于Membership的权 ...

  9. java web简单权限管理设计

    一套最基本的权限管理包括用户.角色.资源. 数据库设计 我的设计如下: 用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单.子菜单.按钮等资源) 角色 ...

随机推荐

  1. linux中redis的php扩展安装

    PHP中的扩展一般都是在安装环境的时候就已经装好了的.但是有的一些扩展在后期想要加上去的话也是可以的.php支持后期安装扩展. 想要安装扩展就需要先去下载安装扩展所需要的扩展源码包.autoconf. ...

  2. Nginx配置文件nginx.conf中文详解

    #定义Nginx运行的用户和用户组user www www; #nginx进程数,建议设置为等于CPU总核心数.worker_processes 8; #全局错误日志定义类型,[ debug | in ...

  3. 64位主机64位oracle下装32位客户端ODAC(NFPACS版)

    64位主机64位oracle下装32位客户端ODAC(NFPACS版) by dd 1.下载Oracle Data Access Components(ODAC) Xcopy的两个版本: x86:(我 ...

  4. linux 查找文件和搜索文件

    按照文件名搜索 find . -name 'file name' grep -lr 'content'  filepath

  5. Xcode playground markdown常用语法

    //: **Bold** *Italic* /*: # h1 ## h2 ### h3 #### h4 h5 h6 same as h3 --- --- --- * blank seperate li ...

  6. HDU-SupportOrNot训练实录

    菜鸡队训练实录. 现场赛记录: 2016:[名称:奖项/排名] ZJPSC:Gold/1 CCPC中南邀请赛:Gold/1 ICPC Dalian:Gold/24 ICPC Beijing:Gold/ ...

  7. 图片Base64编码

    我们经常在做Jquery插件的时候需要插入一些自定义的控件,比如说按钮,而我们自己又觉着button标签很丑,而且不同浏览器显示的效果还不一样,这个时候我们需要用到图片,当然,我们可以通过img标签添 ...

  8. Easyui之datagrid实现点击单元格修改单元格背景颜色

    前段时间有个需求中有点击datagrid的单元格实现某种事件,调用datagrid的onclickCell这个方法很容易实现,但是体验不好啊,完全不知道自己刚才点击的是哪个单元格,然后就尝试单击单元格 ...

  9. [RxJava^Android]项目经验分享 --- 失败重试

    简单介绍一下业务逻辑:获取字符串,如果获取失败进行10次重试,超出10次未成功视为失败. 模拟获取字符串场景 代码块 class MsgTool { int count; String getMsg( ...

  10. 如何设置GridView中某个字段显示数据的一部分?

    后台方法: /// <summary> /// 截取字符串 /// </summary> /// <param name="str">要截取的字 ...