ABP入门系列目录——学习Abp框架之实操演练
源码路径:Github-LearningMpaAbp
完成了简单的增删改查和分页功能,是不是觉得少了点什么?
是的,少了权限管理。既然涉及到了权限,那我们就细化下任务清单的功能点:
- 登录的用户才能查看任务清单
- 用户可以无限创建任务并分配给自己,但只能对自己创建的任务进行查找、修改
- 管理员可以创建任务并分配给他人
- 管理员具有删除任务的权限
从以上的信息中,我们可以提取出以下权限:
- 任务分配权限
- 任务删除权限
那我们下面就来实现针对这两个权限的管理:
一、ABP权限管理的实现
1、先来看看权限定义相关类型:
从该类型依赖图中我们可以看出:
- Permission:权限类,定义了权限的属性。
- PermissionDictionary:继承自Dictionary 类,存储permission对象的字典。
- IPermisssionDefinitionContext:定义了
CreatePermission
和GetPermissionOrNull
方法,分别用来创建和获取权限。 - AuthorizationProvider:抽象类,在Module中实现该接口来定义权限。
- PermissionManager:权限管理类,继承自
PermissionDefinitionContextBase
主要提供了获取权限的系列方法。
2、再来看看权限检查相关类型
从该类型依赖图中简要梳理下核心类:
- IPermissionChecker:从接口命名就明白,这个是用来进行权限检查的。我们可以自己实现它,也可以使用module-zero中给出的实现。
- NullPermissionChecker:当未实现
IPermissionChecker
,系统会默认使用此类将权限赋予给每个用户。 - AbpAuthorizeAttribute:权限检查特性,在应用服务层标注需要的权限。
- AbpAllowAnonymousAttribute:匿名访问特性,忽略权限检查,用于应用服务层。在mvc和webapi中使用
[AllowAnonymous]
。 - AuthorizationInterceptor:授权拦截器,用来拦截定义了
AbpAuthorizeAttribute
特性的方法。
核心的几个类就讲到这里,具体的实现,可以自行查看源码一探究竟。