以前的博客一直都还没写到框架的实现及权限系统,今天开始写个人权限系统,我之前作过的项目基本上都有权限管理这个模块,但各个系统都会有一些不太同样,有些简单点,有些稍微复杂一点,一句话,咱们作的系统都离不开这个权限系统。因此网上不少人尝试作一个通用的权限系统,不评论他们作的怎么样,只是说在网上能找到的直接能用的应该很少,适用的而且能集成到项目中的就更少了,因此仍是考虑本身作一个,不必定很通用,但足够本身用的权限系统。web
关于权限系统的文章网上多如牛毛,不少都是基于角色的访问控制(RBAC)设计。可是发现彻底实现RBAC的理论其实不必定好用,我想作一款适合本身的。因此首先咱们必要明确咱们要去实现哪些东西。api
一、权限资源
a.菜单权限 经理和业务员登录系统拥有的功能菜单是不同的
b.按钮权限 经理可以审批,而业务员不能够
c.数据权限 A业务员看不到B业务员的单据
d.字段权限 某些人查询客户信息时看不到客户的手机号或其它字段mvc
二、用户,应用系统的具体操做者,我这里设计用户是不能直接分配权限的,必需要分配一个角色,角色中再分配权限,若是某个用户权限比较特殊,能够为他专门建一个角色来应用解决,由于若是用户也能够分配权限系统就会复杂不少。框架
三、角色,为了对许多拥有类似权限的用户进行分类管理,定义了角色的概念,以上全部的权限资源均可以分配给角色,角色和用户N:N的关系。ui
四、机构,树形的公司部门结构,国内公司用的比较多,它实际上就是一个用户组,机构和角色N:N的关系,机构和用户也设计成N:N的关系,也就是说有时候一个用户能够从属于两个部门,这种状况在咱们客户需求中的确都出现过。编码
固然除了上面提到的主要对象还包括如下对象spa
五、菜单.net
六、按钮 设计
七、受权代码 之前我作的项目中控制数据权限有如下两种:
a.用部门编码来控制,只能查询到本身所属部门的数据
b.用项目编码来控制,只能查询到本身所属项目的数据。
这样就有一个问题,我到底要用什么字段来控制数据权限呢,因此咱们就设计了一个受权代码,若是你是用机构来控制数据权限,那么你能够把受权代码建成跟机构同样的树,若是用项目编码控制,能够把它建成项目树,用其它字段控制都同样,因此会比较灵活,也把机构或项目解放出来了。3d
八、数据字典
九、系统参数
十、日志查询 登录日志、操做日志(xx人xx时间对xx对象作了xx操做 自定义的)、系统日志(系统运行错误记录等 log4net输出的)
一、表结构设计
2 程序设计
我仍是采用mvc4.0 + web api + easyui + knockout去实现。实际上以前我就实现的差很少,最近也一直在花时间更新完善。
这个权限系统太大了,这一篇确定是说不完的,我这里就先整体上说了一下设计思路,接下每一篇写具体实现,一篇一个功能,你们期待个人下一篇吧。
三、UI设计
很少说了,先上图吧,我在第一篇博客中贴过之前的版本,最近也有一些更新,再贴一次吧,此次截图比较详细点,也配了一些文字的说明介绍。
功能1:菜单导航
【菜单导航】1:包括新增修改删除功能,直接在grid中编辑
功能2:组织结构
【组织结构】1:图形化的树结构,能够新增编辑删除节点
功能3:受权代码
【受权代码】树形grid 能够增添编辑删除
功能4:角色管理
【角色管理】1:直接在grid中 增添编辑删除
【角色管理】2:点编辑权限弹出角色极限窗口,点击选择菜单权限
【角色管理】3:编辑按钮权限,grid中只会出现菜单权限中选中的行,每一个功能有哪些按钮在菜单中已定义好,这里只要勾选按钮便可
【角色管理】4:编辑数据权限 能够多选,但只有一个默认值,该角色新增的业务单据的受权代码为默认的受权代码。
【角色管理】5:编辑字段权限 grid中只会出现菜单权限中选中的行,直接在容许或拒绝中输入字段名,多个字段用逗号隔开
功能5:用户管理
【用户管理】1:左边机构能够过滤,直接在grid中增删改查用户
【用户管理】2:设置机构 可多选,这里机构录入的太多了,出现了滚动条,少些会好看点。
【用户管理】4:用户设置 用户登录后的一些配置信息,好比指定用户的桌面,默认的项目,不一样的系统可能会有不一样的需求,因此这里设计可添加删除的,右上角下拉出来的[我的设置]页面也指向这里的数据
功能6:数据字典
【数据字典】1:左边类别树可过滤,左边是树形grid,能够有层级关系,直接在grid中编辑
【数据字典】2:点击管理类别,类别可在弹出的grid中增删改查
功能7:系统参数
【系统参数】直接grid中编辑,设计了一个是否可编辑字段,只能编辑 是否可编辑为true的参数
若是你们感兴趣,就在右下角帮我【推荐】一下吧,谢谢你们了。我接下来就按照功能列表一篇一篇的来写,下一篇就先开始写菜单管理。 这里整个系统都是采用个人zephyr.net框架开发,应用mvc4.0 webapi easyui knockoutjs开发的实现的。不少朋友私信我一些问题,因此干脆我建立了一个技术交流QQ群:群一:328510073(已满),群二:167813846,欢迎你们来交流。