另外献上在《线体验Demo地址》希望大家也能从中得到一些启发。
地址:http://121.40.148.178:8080/ 、 用户名:guest,密码:123456
一、前言
权限管理是开发框架中很重要的一个模块,因为每套管理系统都会涉及到权限管理,如果我们的开发框架中的权限模块做得很好,很灵活,那么就要可以在所有的项目中通用从而节省大量的时间降低开发成本。
这篇博文会详细地介绍权限开发的重点。
二、权限的模块管理
一套系统会由一个个的功能模块构成,那么权限管理起码要能管到每个功能的准入权限。
那么在我们的后台系统里要如何将每个功能模块纳入到权限管理呢?
其实一般的功能模块就是一个菜单项,那我把每个菜单项在后台注册一下,分配一个ID,再把这个ID跟用户、角色设置关联关系,就可以很好地解决这个问题了。
在用户登陆后获得他的角色然后得出他有哪些菜单是可以访问的,那么就解决了这个功能模块的权限。
核心代码可参考以下代码
/// <summary> /// 加载权限模块 /// </summary> /// <param name="ObjectId">对象主键</param> /// <returns></returns> public List<Base_Module> GetModuleList(string ObjectId) { StringBuilder strSql = new StringBuilder(); if (!ManageProvider.Provider.Current().IsSystem) { strSql.Append(@"SELECT DISTINCT M.* FROM Base_Module M"); strSql.Append(" INNER JOIN Base_ModulePermission MP ON M.ModuleId = MP.ModuleId WHERE ObjectId IN ('" + ManageProvider.Provider.Current().ObjectId.Replace(",", "','") + "')"); } else { strSql.Append(@"SELECT * FROM Base_Module M"); } strSql.Append(" ORDER BY M.SortCode ASC "); return DataFactory.Database().FindListBySql<Base_Module>(strSql.ToString()); }
非常简单的就得到了用户的权限,我们就可以通过这个List去加载菜单和权限验证。
设计界面参考。
模块加入框架管控
这样模块就可以纳入管理了,但是我们有时候会把权限管得更细,不单模块需要管控。
模块上的功能也需要管控,所以我们可以把模块上的按钮也加入管控。
数据权限在某些场合也是需要管控的。
所以按照模块注册的方式,我们也可以这们把模块上的按钮也加入到管控对象中来
那么注册好了被授权对象以后,我们就要对用户或者角色进行授权了,这里讲一下对角色授权的方法,在现实中对角色授权也用得很多。
首先我们要建立角色,然后指定哪些用户具有这个角色的权限
当我设置好了很多角色,我想批量地进行授权可以按如下方式进行
然后,就是重点,如何给角色分配权限,因为按钮是包含在模块上的,所以对模块和按钮的授权可同时进行
对数据项的授权
这样授权完成后,换成一个普通用户的身份进来就只能看到如下页面了
没有权限的模块根本无法操作。
另外献上在《线体验Demo地址》希望大家也能从中得到一些启发。
地址:http://121.40.148.178:8080/ 、 用户名:guest,密码:123456
QQ技术交流群:239168429