ABP框架学习之——授权(Authorization)
来源:互联网 发布:网络剪刀手中文版下载 编辑:程序博客网 时间:2024/05/17 02:30
定义权限
一个唯一的权限是为需要授权的每个操作定义的。我们应该在使用权限之前定义一个权限。ABP的设计是模块化的,因此不同的模块可以有不同的权限。为了定义模块的权限,应该创建一个派生自AuthorizationProvider,通过abp官网创建的模板中包含这样一个例子:
public static class PermissionNames { public const string Pages_Tenants = "Pages.Tenants"; public const string Pages_Users = "Pages.Users"; public const string Pages_Roles = "Pages.Roles"; }
public class MZCAuthorizationProvider : AuthorizationProvider { public override void SetPermissions(IPermissionDefinitionContext context) { context.CreatePermission(PermissionNames.Pages_Users, L("Users")); context.CreatePermission(PermissionNames.Pages_Roles, L("Roles")); context.CreatePermission(PermissionNames.Pages_Tenants, L("Tenants"), multiTenancySides: MultiTenancySides.Host); } private static ILocalizableString L(string name) { return new LocalizableString(name, MZCConsts.LocalizationSourceName); } }
IPermissionDefinitionContext有创建和获取权限的方法。一个权限定义了一些属性:
- Name:系统中 唯一的名字。最好为权限的名字定义一个const字符串而不是变量字符串。我们偏向使用“.”符号用于有层次的名字,但这不是强制的。你可以设置任何你喜欢的名字,唯一的一点是保证它必须是唯一的。
- DisplayName:用于以后在UI上显示权限的本地化字符串。
- Description:用于以后在UI上显示权限定义的本地化字符串。
- IsGrantedByDefault:表示该权限是否授予给所有登录的用户,除非该权限显式禁止未授予给用户。该值一般默认为false。
- MultiTenancySides:对于多租户应用,租户或者租主可以使用同一个权限。这是一个Flags枚举,因此一个权限可以用于租户和租主。
- dependedFeature:可以用于声明一个功能的依赖。因此,只有功能依赖满足了,该权限才会被授予。
一个权限可以有父权限和子权限。虽然这不会影响权限检查,但是在UI上组合权限有所帮助,下面是我自己添加了权限,进行了以下修改。
public static class PermissionNames { public const string Pages_Tenants = "Pages.Tenants"; public const string Pages_Users = "Pages.Users"; public const string Pages_Roles = "Pages.Roles"; /// <summary> /// 博客管理页面权限 /// </summary> public const string Pages_Blogs = "Pages.Blogs"; public const string Pages_Blogs_Notes = "Pages.Blogs.Notes"; public const string Blogs_Notes_Edit = "Pages.Blogs.Notes.Edit"; public const string Blogs_Notes_Delete = "Pages.Blogs.Notes.Delete"; }
var BlogPermission = context.CreatePermission(PermissionNames.Pages_Blogs, L("Blogs")); var NotePermission = BlogPermission.CreateChildPermission(PermissionNames.Pages_Blogs_Notes,L("Notes")); NotePermission.CreateChildPermission(PermissionNames.Blogs_Notes_Edit, L("EditNotes")); NotePermission.CreateChildPermission(PermissionNames.Blogs_Notes_Delete, L("DeleteNotes"));
当创建了授权提供者之后,我们应该在模块的PreIntialize方法中注册它:我们的模板中是这样注册的
public class MZCApplicationModule : AbpModule { public override void PreInitialize() { Configuration.Authorization.Providers.Add<MZCAuthorizationProvider>(); } }
使用AbpAuthorize特性验证权限
我们的模板中是这样使用的。
[AbpAuthorize(PermissionNames.Pages_Roles)] public class RoleAppService : AsyncCrudAppService<Role, RoleDto, int, PagedResultRequestDto, CreateRoleDto, RoleDto>, IRoleAppService {}
AbpAuthorize特性需要注意的地方
- ABP对于授权使用了强大的动态方法拦截(interception)。因此,使用AbpAuthorize特性有一些限制:
- 不能用于私有方法。
- 不能用于静态方法。
- 不能用于非注入类的方法(我们必须要使用依赖注入)。
使用IPermissionChecker验证权限
虽然AbpAuthorize特性对于大多数情况相当够用了,但是肯定存在我们会在一个方法体内检查权限的情况。我们可以注入并使用IPermissionChecker。可以看见有两个方法提供使用。
// // 摘要: // This class is used to permissions for users. public interface IPermissionChecker { Task<bool> IsGrantedAsync(string permissionName); Task<bool> IsGrantedAsync(UserIdentifier user, string permissionName); }
在ApplicationService基类注入并定义了PermissionChecker属性。这样,权限检查者不需要在应用服务类中注入就可以使用了。
- ABP框架学习之——授权(Authorization)
- ABP框架学习之——AutoMapper。
- ABP入门系列目录——学习Abp框架之实操演练(推荐)
- Shiro学习笔记(3)——授权(Authorization)
- [置顶]ABP入门系列目录——学习Abp框架之实操演练
- ABP 框架从源码学习——abp框架启动和结束(1)
- ABP 框架从源码学习——abp框架启动核心类AbpBootstrapper(2)
- ABP框架学习之——数据校验
- ABP学习笔记之搭建APB框架
- freeradius授权authorization——users文件
- NFine-ABP框架学习
- YII2 的授权(Authorization)
- 第五章:Shiro的授权(Authorization)
- 使用JAAS框架和LDAP做验证(Authentication)、授权(Authorization)
- 使用JAAS框架和LDAP做验证(Authentication)、授权(Authorization)
- Shiro系列之Shiro+Mysql实现用户授权(Authorization)
- 关于OAuth(即Open Authorization,开放授权)
- OAuth 2.0 授权(authorization)的开放网络标准
- 百度开源RPC框架brpc
- java学习第36天,list集合
- spring多线程返回值 并对多个返回值进行操作
- 最近找工作的面试总结
- linux学习第八篇:文件或目录权限chmod,更改所有者和所属组chown,umask,隐藏权限lsattr_chattr
- ABP框架学习之——授权(Authorization)
- 拦截器
- tomcat配置虚拟映射路径
- eclipse如何把多个项目放在文件夹下
- 并发锁
- 面向对象,类的组合关系,继承,实现,方法重写,方法重载,this的使用,抽象方法和抽象类的比较,父类构造方法存在的意义,多态的是用和解析,各种访问修饰符
- struts2自动装配
- 安卓开发之应用角标
- 爬取美女图片(python源码)