asp.net mvc +easyui 实现权限管理(二)
一写完后,好久没有继续写了。最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统。想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾。
我就大概说一下公司目前在做的权限系统,各位看官给点评价。
设计总体要求: (注:项目名称为 统一权限管理系统)
1.做一个通用权限系统。
2.权限设计按照角色设置。
3.提供统一权限接口
以上就是整体要求,解释一下, 我们的通用是指的以后每开发一套新系统,只需要在统一权限管理系统中进行相应的配置就好了,无需再去开发一套权限系统。说白了就是所有系统各自有自己的权限数据库表,表名称和字段都一样,只是在不同的数据库中,但是公用一套统一的设置页面,进入统一权限系统后,先选择具体的系统 比如财务系统,然后就进入财务系统的权限管理(原理很简单 就是在选择具体系统的时候切换到相应的数据库)。
相信在之前的一篇文章中我已经详细介绍过我的设计思路 即:所有权限跟用户挂钩, 最终的权限体现在用户权限表中。而用户角色在我的设计中只是起到了一个统一分配权限的作用, 即使没有角色也没关系,我可以直接给某个用户分配权限。这样设计我认为分配权限是非常灵活的,但是有个缺点就是用户权限表的数据量有点大,我们目前的erp系统中该表已经有了250万条数据了,3800多个用户平均有600多条数据。但是并不影响快速检索,而目前他们做的角色设计是所有人的权限都来自于角色,于是当某个用户有特殊权限的时候不得不给他新建一个角色(我也是无语了,就这种设计居然也能被通过,严重不满足复杂权限需求的情况,后期导致过多的角色,混乱是可以想象的)。
另外还有一个非常坑爹的设计 即每当在统一权限系统创建一个新的系统时,比如财务系统,那就在一台数据库服务器上添加一个相应的数据库(只有权限相关的表)。两个系统就两个数据库只是名称不同。(注意一点:是同一台数据库服务器上)。这样脑残的设计最终的结果就是 财务系统的业务表和权限表分别放在不同的服务器上了, 那么需要得到用户权限时就得去调用webapi接口获取。可以想象系统间将严重耦合 , 所有系统依赖于权限接口,而且所有权限表放在同一台数据库服务器上安全风险很高,一旦接口或者数据库出问题那么所有系统都挂掉,另外一个问题是不得不在权限表和业务表之间同步数据权限(如:分销商权限,分销商是属于业务相关的数据,也是数据权限的一种,那么在业务中新添加一个分销商就得通过接口同步到权限表中,耦合性也很高)。
好了吐槽结束,那么我会怎么改进这个设计呢? 通过以上的分析可以看出存在的几个问题:
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地址过段时间再公布出来。
asp.net mvc +easyui 实现权限管理(二)的更多相关文章
- asp.net mvc +easyui 实现权限管理(一)
权限是每个企业应用必须的模块,可以简单,也能比较复杂.目前我们公司的权限要求是 能管控页面.字段.按钮.以及数据权限. 正好公司的进销存系统权限模块由我负责.做完后做下记录是个不错的习惯,知识是慢慢积 ...
- 一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)
在上一节中我们总结了关于权限控制的方式,我们这一节讲解关于权限控制中角色权限的授予处理等等并做本系列的总结. 首先,我们来谈谈权限控制中角色权限的控制,上一节只是针对权限拦截中比较粗的控制,如果我们需 ...
- 一步一步Asp.Net MVC系列_权限管理设计
http://www.cnblogs.com/mysweet/archive/2012/07/26/2610793.html
- ASP.NET MVC +EasyUI 权限设计(二)环境搭建
请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列
http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
随机推荐
- 【PKUSC2018】【loj6433】最大前缀和 状压dp
这题吼啊... 然而还是想了$2h$,写了$1h$. 我们发现一个性质:若一个序列$p$能作为前缀和,那么在序列$p$中,包含序列$p$最后一个数的所有子序列必然都是非负的. 那么,我们 令$f[i] ...
- js delete删除对象属性,delete删除不了变量及原型链中的变量
js delete删除对象属性,delete删除不了变量及原型链中的变量 一.delete删除对象属性 function fun(){ this.name = 'gg'; } var obj = ne ...
- 2 new出的对象 prototype与__proto__
对象没有原型对象,函数才有 new出的对象,this的会重新创建,二prototype并不会重新创建,而是追溯原型链的方式进行继承 var Book=function(id,bookname,pric ...
- 剑指offer四十三之左旋转字符串
一.题目 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...
- vim实践学习
http://coolshell.cn/articles/5426.html http://www.lagou.com/jobs/138351.html awk:http://coolshell.cn ...
- centos 7 nginx 安装
1.下载nginx rpm包 下载地址:http://nginx.org/packages/mainline/centos/7/x86_64/RPMS/ ,可查看所有安装包 从中如下载: wget h ...
- Sublime Text 3快捷键的使用技巧(python)
Sublime Text 3非常实用,但是想要用好,一些快捷键不可或缺,所以转了这个快捷键汇总. 先拉出来说几个切身体会最常用, Ctrl+Z 撤销. Ctrl+Y 恢复撤销 Alt+Shift+2 ...
- GRU
GRU模型(比LSTM减少了计算量) LSTM的模型,LSTM的重复网络模块的结构很复杂,它实现了三个门计算,即遗忘门.输入门和输出门. 而GRU模型如下,它只有两个门了,分别为更新门和重置门,即图中 ...
- 爬虫实战(二) 51job移动端数据采集
在上一篇51job职位信息的爬取中,对岗位信息div下各式各样杂乱的标签,简单的Xpath效果不佳,加上string()函数后,也不尽如人意.因此这次我们跳过桌面web端,选择移动端进行爬取. ...
- 二叉树的LCA(最近公共祖先)算法
1.如果是二叉搜索树 2.如果是普通树