(Blog.Core框架功能点概述)

Blog.Core开源四年啦,一行行代码凝结了大家的热情和心血,基本功能骨架已完成,欢迎更多的公司和企业使用哟。真实公司留言盖楼可获得一对一技术指导:

https://github.com/anjoy8/Blog.Core/issues/75

书接上文,上回咱们说到了《【Blog.Core开源】将Program升级为.NET6.0版本》,终于将项目完全的升级到了6.0,而且6.0是一个三年的LTS版本,所以可以暂时稳定一段时间了。正好最近也把框架中最后一个版图——数据部门权限,给集成进来了。当然每个公司的具体情况不一样,我只是提供一个抽象的功能点,还需要各自在具体的情况中,做相应的修改。

PS:所有代码已经全部更新到master分支,欢迎批评指正。

今天简单说一下,部门权限设计的概要设计吧,如果不是很清晰,下次直播的时候,我再详细的讲讲这一块,配合着鉴权认证一起。

1、部门表结构概要设计

我们都知道,部门表结构其实挺简单的,无非就是id、name、pid之类的常规设计,然后就是写业务逻辑,做CURD接口了,其中稍微需要动脑筋考虑的事情就是如何做到级别的划分和快速定位。

我这里先设计了一版,主要还多了一个关系码的字段,用来表示当前部门的上游节点信息,每次更新的时候要同步更新,要注意:

这么设计的好处是方便我们快速的查找整个部门树的关系,比如:

1、可以查询0,1的所有同级部门,用equal即可满足;

2、可以查询0,1的所有子集部门,用contain即可,同时也可以进一步细分是所有子集还是下一级(用长度即可快速找到);

3、可以快速查询当前部门的部门链(下文就会用到);

这样部门权限就很清晰明了,因为快速定位部门树关系对我们来说很重要。

剩下的就是CURD了,比较简单,大家看Blog.Core源码就行了,最终展示到页面上的效果是这样的:

(代码下载后,生成种子数据,用超级管理员查看效果)

(部门树型列表展示)

(添加部门,勾选父级部门)

2、给用户绑定部门信息

有了部门信息,那我们就需要绑定到用户上了,一般来说一个用户肯定就是一个部门了,如果一定要实现多个部门,就需要继续抽象一个逻辑模型了,下文会说到。

这块逻辑比较简单,就是在用户表添加一个部门id就行,不用存放整个父级上游关系链,让部门子领域处理就行,用户不需要考虑这块。最终的效果就是这样的:

(用户列表)

(用户添加/编辑部门信息)

我们在把部门id存到数据库里,然后通过部门表的CodeRelationship字段给带出完全的部门名称和部门id数组,是不是很方便,核心代码是这样的:

private (string, List<int>) GetFullDepartmentName(List<Department> departments, int departmentId){var departmentModel = departments.FirstOrDefault(d => d.Id == departmentId);if (departmentModel == null){return ("", new List<int>());}// 获取整个链路节点var pids = departmentModel.CodeRelationship?.TrimEnd(',').Split(',').Select(d => d.ObjToInt()).ToList();pids.Add(departmentModel.Id);var pnams = departments.Where(d => pids.Contains(d.Id)).ToList().Select(d => d.Name).ToArray();var fullName = string.Join("/", pnams);return (fullName, pids);}

其实到了这里,用户部门权限已经基本定型了,我们先考虑下以后怎么做划分——我们编辑某条目标数据,比如是绩效信息,每条目标数据都会有个UserId,那当前人登录的时候,就根据UserId,查出来部门DepartmentId,就可以获取整个部门的数据了。这是最简单的最基础的一套部门权限数据,但是我们肯定不会满足于这种情况的。因为我们经常会有这个需求:

1、查询我同级别的所有部门数据;

2、查询我下属的数据;

3、甚至是跨部门查询数据;

那这个时候就需要我们再往上抽离一层,将用户和部门关系进行融合,但是我把这块逻辑给放到Role上了,整体流程是:

根据User查询Role,根据Role查询具体的控制Department的逻辑,从而实现目的。

3、角色和部门逻辑的绑定

这块逻辑是可以放到User表的,但是这样每个人都需要一一的标记,无法做到统一的处理,所以我还是放到了Role上,先看效果吧:

(Role增加一个权限范围的抽象概念)

(权限范围有六种级别)

可以看到这几种级别就是上文咱们说到的那几种关系:

我想查本部门的(普通人),仅仅自己的,全部的(公司老板),本部门及以下的(你的直属leader),可以看到除了其他五种,还有一个自定义数据权限,支持跨部门查询数据,这场景肯定有吧,比如风控部门,你懂的:

(权限范围支持自定义权限分配)

4、总结

今天的分享暂时就先到这里了,代码均已提交到GitHub的Master分支,最后再总结下整体结构设计:

一个人打开目标数据页面,根据自己的角色信息,然后根据权限范围机制,查找对应的部门,再根据部门来过滤到目标数据,所以需要同时也把部门id给冗余到目标数据表中,这样方便查询,当然,用sql语句两表inner join也是可以的。

那最后再思考下,能不能做个统一过滤器或者AOP来处理呢,答案是肯定的,部门权限分享下期再给大家揭晓吧。

【Blog.Core开源】框架集成部门权限相关推荐

  1. 【Blog.Core开源】网关自定义认证鉴权与传参

    书接上文,上回咱们说到了<[Blog.Core开源]网关统一集成下游服务文档>,已经将多个下游服务统一集成到了网关里,并且也把接口文档Swagger给集成了,那今天就说一下认证和鉴权相关的 ...

  2. 【Blog.Core开源】快速预览Admin界面效果

    ( 半盏屠苏犹未举,灯前小草写桃符 ) 书接上文<[Blog.Core开源]开发插件,给Swagger加权>,在上篇文章中,我们给项目的接口文档增加了一个控制界面,可以输入用户名密码,这样 ...

  3. 【Blog.Core开源】将Program升级为.NET6.0版本

    大家假期好,好久不见,之前忙于其他事情,公众号暂时搁置了一个月了,新的一年开始了,很多小伙伴开始催更了,粉丝的要求必须满足. 2022年打算重点推广BCVP社区,所以还是希望有愿意投稿的小伙伴,积极投 ...

  4. 【Blog.Core开源】快速升级.NET 6.0

    BCVP 只要贡献,就不分大小,每个人都是这个时代最璀璨的星! 一个以开源项目主导的社区组织. <Blog.Core>开源项目已经3年,期间收获了很多很多,同时也收到了很多小伙伴的支持和鼓 ...

  5. Magicodes.Admin.Core开源框架总体介绍

    框架说明 Magicodes.Admin.Core框架在ABP以及ASP.NET ZERO的基础上进行了封装和完善,目前基于.NET Core 2.0+(Framework版本),由于部分组件在.NE ...

  6. 【Blog.Core开源】网关统一集成下游服务文档

    一般看到公众号更新,就是大概率要开始上班了

  7. .net core 开源框架

    https://github.com/thangchung/awesome-dotnet-core ABP .NET Core Community https://github.com/dotnetc ...

  8. 【Blog.Core开源】完成升级.NET 6.0

    (千呼万唤始出来,_ _ _ _ _ _ _) 是不是每个人都已经尝试一遍vs2022和.NET6.0了

  9. Blog.Core高级进阶:共赴五年之约

    读书破万卷,下笔如有神. 佳 著 荐 大家马上新年好呀,还有七天就是春节了,2022年是真真正正的到来了,老张打算在新的一年里,继续为开源社区做贡献,Blog.Core开源项目也正式进入第五个年头了, ...

最新文章

  1. DPDK — RTE_LOG 日志模块
  2. hbase java api 两种方式
  3. 科研小白在首次论文写作时需要注意哪些问题?
  4. 安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
  5. 作者:邹本友,男,中国人民大学信息学院博士生, CCF学生会员。
  6. Memcache 中实现消息队列
  7. java interpreter_解释器模式(Interpreter)Java
  8. 告别IE给我们的web开发带来的困扰(使用chrome frame v8引擎)
  9. 真正的创业者和伪创业者的区别在哪里?
  10. pyrcc5和pyuic5.exe文件放在scripts文件夹下
  11. 使用data attributes
  12. 2.中小型企业通用自动化运维架构 -- Ansible 安装
  13. Python数据分析之pandas常用命令整理!
  14. 微信小程序获取后端数据
  15. Python学习_100Days
  16. python mht 文件转html文件
  17. 极路由 刷linux,极路由 刷uboot + openwrt , 以及连接校园网(netkeeper)
  18. ABAP里OO ALV选中或container alv里的选中方法
  19. 【李开复】成功、自信、快乐(三)
  20. 字符 正则表达式详解

热门文章

  1. Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突...
  2. Entity Framework 简单增删改操作
  3. 利用MyBatis Generator自动创建代码
  4. java中想要保留2位小数_java使double保留两位小数的多方法 java保留两位小数
  5. word2vec应用场景_word2vec的使用参数解释和应用场景
  6. 滴滴Booster移动APP质量优化框架 学习之旅 三
  7. linux下的SSHD被连接端口修改
  8. Java泛型主题讨论
  9. 【APP接口开发】常用HTTP响应头状态码详解
  10. IDEA破解 2017 IDEA license server 激活(可用)