AppBoxFuture(九): 组织结构与权限体系
2024-08-29 12:05:48
权限体系是用于约束用户访问或操作资源的权利,这里的“资源”可以指数据,也可以指特定的功能(如审核订单)。通常的权限体系设计是基于角色的访问控制方式,用户通过角色与权限进行关联。作者的实现方式稍微有些不同,通过组织结构树与权限进行关联,这样可以实现子级节点继承上级节点设置的权限。
一、数据结构
- 组织单元(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。
最新文章
- T-SQL 实现行转列
- Asp.Net MVC 模型验证详解-实现客户端、服务端双重验证
- __attribute__你知多少(转)
- CentOS-6.4无线上网命令行配置
- ubuntu中彻底删除nginx
- 最锋利的Visual Studio Web开发工具扩展:Web Essentials详解
- WPF专业编程指南 - 那些根元素<;>;的解释
- 强大的健身软件——Keep
- c语言链表升级
- 機器學習基石(Machine Learning Foundations) 机器学习基石 课后习题链接汇总
- [HAOI2011]向量
- JavaScript面试的完美指南(开发者视角)
- SQLServer之创建辅助XML索引
- 2018-2019-2 20165313 Exp3 免杀原理与实践
- zabbix使用客户端和不使用客户端监控指定端口
- mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file (/opt/mysql/data/mysql.pid)
- js面向对象插件的做法框架new goBuy(&#39;.cakeItem&#39;,{ add:&#39;.add&#39;, reduce:&#39;.reduce&#39; },[1,0.7,0.6]);
- python筛选特定文件的信息按照格式输出到txt
- PHP生成excel表格文件并下载
- How to use base class&#39;s assignment operator in C++
热门文章
- 《How Tomcat works》
- 什么是EAC模型
- C#_服务器EXCEL模板文件导出
- ES6新语法(二)
- .netcore 中使用开源的AOP框架 AspectCore
- Linux下使用 github+hexo 搭建个人博客07-next主题接入搜索和站点管理
- SQL Server如何查看存储过程的执行计划
- 【使用篇二】SpringBoot整合aop(13)
- BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
- <;Graph>; Topological + Undirected Graph 310 Union Find 261 + 323 + (hard)305