unity3D技术之基于Unity的AOP的符合基于角色的访问控制(RBAC)模型的通用权限设计.docx

上传人:飞****2 文档编号:52753347 上传时间:2022-10-23 格式:DOCX 页数:5 大小:22.55KB
返回 下载 相关 举报
unity3D技术之基于Unity的AOP的符合基于角色的访问控制(RBAC)模型的通用权限设计.docx_第1页
第1页 / 共5页
unity3D技术之基于Unity的AOP的符合基于角色的访问控制(RBAC)模型的通用权限设计.docx_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《unity3D技术之基于Unity的AOP的符合基于角色的访问控制(RBAC)模型的通用权限设计.docx》由会员分享,可在线阅读,更多相关《unity3D技术之基于Unity的AOP的符合基于角色的访问控制(RBAC)模型的通用权限设计.docx(5页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、AOP的特性使得它非常适合用来设计类似权限控制的功能,这是本文的基础,如果想要了解AOP的实现,可以参考动态织入的AOP实现。在基于角色的访问控制(RBAC)中,有三要素:用户、角色、任务(或操作)(User、Role、Task),其稳定性逐渐增强,两个关系,UserRole、RoleTask,其中: User 是日常管理运行时建立 Role 是部署/交付建立 Task 是开发时确定 UserRole 是日常管理运行时建立 RoleTask 是部署/交付时建立 在本例中,针对Task和Role,我们设计如下的两个类:?AttributeUsage(AttributeTargets.All, A

2、llowMultiple = false, Inherited = true) public class TaskAttribute: Attribute public TaskAttribute(string taskName, string taskDescription) TaskName = taskName; TaskDescription = taskDescription; public string TaskName get; set; public string TaskDescription get; set; public class Role public string

3、 Name get; set; public List Tasks get; set; 可以看到,Task是继承自Attribute的,源于Task需要和实际的功能接口匹配起来,而Role,则无此需要。本文演示所需要的权限关系描述如下:1:系统有4个权限;2:系统有两个角色,一个叫做Manager,它【狗刨学习网】具有两个权限,另一个角色为Common,它当前不具备任何权限;以上的关系描述,我们在代码当中模拟如下:?/模拟系统总共有4种权限 public static List Tasks get if (_tasks = null) _tasks = new List() new TaskA

4、ttribute(AddItem,增加), new TaskAttribute(ModifyItem,修改), new TaskAttribute(RemoveItem,删除), new TaskAttribute(ListItem,获取列表) ; return _tasks; private static List _roles; /模拟系统总共有两类角色 /第一类角色Manager,有增加和修改权限 /第二类角色Common,没有任何权限 public static List Roles get if (_roles = null) _roles = new List() new Role

5、()Name = Manager, Tasks = new List() new TaskAttribute(AddItem,增加), new TaskAttribute(ModifyItem,修改) , new Role()Name = Common, Tasks = new List() ; return _roles; 权限判断在切面部分,简化如下(可以看到是判断当前用户是否具有相关权限):?public class AuthorityHandler : ICallHandler / / Invoke order / public int Order get; set; public I

6、MethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext) MethodBase mb = input.MethodBase; object attrObj = mb.GetCustomAttributes(typeof(TaskAttribute), false); if (attrObj = null) throw new ArgumentException(TaskAttribute should be defined with the AuthorityAttribute); else Tas

7、kAttribute attr = (TaskAttribute)attrObj0; if (!string.IsNullOrEmpty(attr.TaskName) string taskName = attr.TaskName; /get current users roles IEnumerable currentUserRoles = from p in SampleApp.Roles where p.Name = SampleApp.User.Name select p; /if match then return; foreach (Role currentUserRole in

8、currentUserRoles) IEnumerable tasks = from p in currentUserRole.Tasks where p.TaskName = taskName select p; if (tasks.Count() 0) var retvalue = getNext()(input, getNext); return retvalue; /else throw exception throw new UnauthorizedAccessException(access denied); return null; public class AuthorityA

9、ttribute : HandlerAttribute public override ICallHandler CreateHandler(IUnityContainer container) return new AuthorityHandler(); 调用方代码:?static void Main() var container1 = new UnityContainer() .AddNewExtension() .RegisterType(); container1 .Configure() .SetInterceptorFor(new InterfaceInterceptor(); SampleApp.User = new User() Name = Common ; var sample1 = container1.Resolve(); sample1.AddItem(); Console.ReadKey(); 可以看到,使用了Unity来进行AOP;运行效果:代码下载:权限.rar

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com