AppBoxFuture(九): 组织结构与权限体系
2019-06-12 07:31
1301 查看
权限体系是用于约束用户访问或操作资源的权利,这里的“资源”可以指数据,也可以指特定的功能(如审核订单)。通常的权限体系设计是基于角色的访问控制方式,用户通过角色与权限进行关联。作者的实现方式稍微有些不同,通过组织结构树与权限进行关联,这样可以实现子级节点继承上级节点设置的权限。
一、数据结构
- 组织单元(OrgUnit):根据上级标识自引用的表结构,另通过EntityRef引用组织或工作组或员工;
- 权限模型(PermissionModel):框架内置的元数据,包含已赋予权限的组织单元集合。
二、权限设置
- 开发时根据业务需要,通过IDE主菜单->New->Permission新建权限模型,另可通过New->Folder创建模型文件夹分门别类管理相关模型;
- 运行时通过OrgUnits视图(暂简单实现,如下图所示)选择组织单元,然后在“权限设置”面板勾选相应的权限。
注意:请勿将Admin用户的Admin权限取消掉,未做判断会导致无权限。
三、权限验证
内部用户登录流程
- 根据账号与密码查询员工并验证密码;
- 查询员工映射的组织单元,形成组织单元路径(如:/公司/部门/员工);
- 以组织单元路径新建并缓存会话信息。
注意:系统默认的Admin密码:760wb,Test密码:la581
服务内验证权限
调用服务时,根据会话的组织单元路径与指定的权限比对,可判断当前用户是否具备特定的权限。
注意:目前未验证权限的服务所有人均可调用。
- 服务方法Attribute方式
[InvokePermission(Permissions.Admin || Permissions.Developer)] //可组合 public async Task<EntityList<Entities.OrgUnit>> LoadTreeList() { var q = new TableScan<Entities.OrgUnit>(); return await q.ToTreeListAsync(t => t.Childs); }
- 服务方法内代码验证方式
public async Task SaveOrder(Entities.Order order) { if (!Permissions.SaveOrder) throw new Exception("不具备操作权限"); await EntityStore.SaveAsync(order); }
四、本篇小结
本篇主要介绍了框架集成的权限体系的实现方式,Github上的运行时已经更新可测试。如果您有问题或Bug报告,请留言或在Github提交Issue。
相关文章推荐
- SharePoint中的权限体系
- mysql 的权限体系介绍
- WF的权限与角色(3)一个简单的权限体系结构
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 适合大型企业信息化应用使用的角色权限管理体系
- 复盘 | B端产品中,如何构建权限体系?
- 混合了RBAC和ACL的权限系统(一) -- 用户组织结构
- 权限管理体系以及命令权限配置
- YII framework下基于角色的访问控制(RBAC),权限设置 yii下,filters()和accessControl()是YII基本的访问控制体系, public function filt
- Java之访问权限控制符以及结合继承体系引发的注意事项
- linux安全体系的文件权限管理
- C++继承体系访问权限
- MaxCompute和DataIDE权限体系介绍
- 取客户端IP和MAC地址进行权限验证的一套体系
- 权限体系设计
- [转]PostgreSQL 逻辑结构 和 权限体系 介绍
- Cognos8.3权限体系[转]
- Oracle三层权限体系介绍
- sql server drop talbe 自动删除关联的外键 ,权限体系(一)
- RBAC权限体系
- SharePoint中的权限体系