一写完后,很久没有继续写了。最近公司又在从新开发权限系统了,可是因为我人微言轻,没法阻止他们设计一个太监版的权限系统。想一想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾。html
我就大概说一下公司目前在作的权限系统,各位看官给点评价。git
设计整体要求: (注:项目名称为 统一权限管理系统)github
1.作一个通用权限系统。web
2.权限设计按照角色设置。数据库
3.提供统一权限接口api
以上就是总体要求,解释一下, 咱们的通用是指的之后每开发一套新系统,只须要在统一权限管理系统中进行相应的配置就行了,无需再去开发一套权限系统。说白了就是全部系统各自有本身的权限数据库表,表名称和字段都同样,只是在不一样的数据库中,可是公用一套统一的设置页面,进入统一权限系统后,先选择具体的系统 好比财务系统,而后就进入财务系统的权限管理(原理很简单 就是在选择具体系统的时候切换到相应的数据库)。缓存
相信在以前的一篇文章中我已经详细介绍过个人设计思路 即:全部权限跟用户挂钩, 最终的权限体如今用户权限表中。而用户角色在个人设计中只是起到了一个统一分配权限的做用, 即便没有角色也不要紧,我能够直接给某个用户分配权限。这样设计我认为分配权限是很是灵活的,可是有个缺点就是用户权限表的数据量有点大,咱们目前的erp系统中该表已经有了250万条数据了,3800多个用户平均有600多条数据。可是并不影响快速检索,而目前他们作的角色设计是全部人的权限都来自于角色,因而当某个用户有特殊权限的时候不得不给他新建一个角色(我也是无语了,就这种设计竟然也能被经过,严重不知足复杂权限需求的状况,后期致使过多的角色,混乱是能够想象的)。安全
另外还有一个很是坑爹的设计 即每当在统一权限系统建立一个新的系统时,好比财务系统,那就在一台数据库服务器上添加一个相应的数据库(只有权限相关的表)。两个系统就两个数据库只是名称不一样。(注意一点:是同一台数据库服务器上)。这样脑残的设计最终的结果就是 财务系统的业务表和权限表分别放在不一样的服务器上了, 那么须要获得用户权限时就得去调用webapi接口获取。能够想象系统间将严重耦合 , 全部系统依赖于权限接口,并且全部权限表放在同一台数据库服务器上安全风险很高,一旦接口或者数据库出问题那么全部系统都挂掉,另一个问题是不得不在权限表和业务表之间同步数据权限(如:分销商权限,分销商是属于业务相关的数据,也是数据权限的一种,那么在业务中新添加一个分销商就得经过接口同步到权限表中,耦合性也很高)。服务器
好了吐槽结束,那么我会怎么改进这个设计呢? 经过以上的分析能够看出存在的几个问题:ui
1.彻底按照角色分配权限不够灵活。
2.全部权限表放在同一台服务器上耦合性过高,不安全,且没法作表之间的关联。
3.设计太复杂,致使系统效率下降(主要是指 须要接口获取权限不够快(缓存是个办法,可是不得不考虑缓存过时))。
针对以上问题个人设计是:1.用户的全部最终权限均可以跟用户id直接挂钩(即:用户的权限不彻底依赖于角色,最终用户全部的权限体现是在用户权限表中)。
2.每套系统的权限表跟业务表放在同一个数据库中,只是将管理权限的页面统一。
3.统一权限管理系统的数据库中只保留 用户表,系统信息表,用户系统表等基本的表(注:公司全部的用户放在一块儿,方便统一登陆系统,即财务系统和进销存系统只用登陆一个,另外一个直接切换不须要重复登陆每一个系统)。
梳理一下统一权限管理的流程以下:
1.用户经过同一个登陆网址进入系统。
2. 判断用户是否为管理员,若是是管理员则跳转到系统管理页面,若是是普通用户就跳转到选择业务系统的入口。
3.管理员能够添加系统,输入系统名称,编码,以及数据库的帐号密码 点击建立系统(这里须要数据库的帐号密码,后台会作加密处理,安全性应该没问题),也能够点击进入以前已经建立的系统。
4.管理相应的用户权限。
总结统一权限分配提供以下功能:
1.业务系统维护(即:能够管理业务系统,好比添加一个财务系统,那么根据添加时提供的数据库帐号密码 会自动建立一套权限相关的表)
2.用户管理(公司全部的用户都统一在这里管理,方便作统一登陆等)
3.系统页面管理(即:业务系统的页面管理,好比:财务的帐套管理页面,那么我须要配置 页面名称,页面地址,页面图标,是否启用,是否显示等)
4.系统数据字典(即 表字段)
5.功能按钮 (添加,修改 等等)
6.页面权限分配(将页面和字典、功能关联在一块儿。即:页面有哪些字段,哪些功能按钮)
7.用户权限分配 (勾选用户的权限 包括:页面权限,字段权限,功能按钮权限,数据权限)
8.角色管理
9.部门管理
10.角色权限管理(给角色分配权限 同样是 页面权限 字段权限 功能权限 数据权限 不一样的是角色权限的变化须要反映到对应的用户上)
11.统一登陆功能(公司全部的软件系统都统一在这里登陆,登陆后再选择业务系统,业务系统之间跳转不须要从新登陆。)
12.数据库相关的操做(数据库表添加,简单查询,添加数据,备份等)
13.日志(登陆日志,操做日志,错误日志)
设计大概就是这些了,我打算利用休息时间,在github上建立一个开源项目来实现这些功能。开发的技术大概是:Asp.net MVC+easyui+Ibatis.net 。具体的github地址过段时间再公布出来。