对于B/S结构的权限控制,有N多种实现方式的权限模型,但很多都是非常的复杂,以前在做这块时一直就做的不是很好,考虑的过于复杂,其实应该遵循Simple原则先做出自己能想到的最简单的方案,再逐渐的重构,一种基于URL方式的权限模型就非常简单,很容易理解,也是非常的有效。
模型仍然是基于RBAC,遵循User---->Role---->Permission---->Resource+Operate,在URL方式的权限模型中认为所有对于系统的操作均通过URL进行,其实在B/S结构中这样认为也没有什么不可的,既然是这样那么模型就很容易建立了,例如对于用户管理模块,有查看、新增、编辑、删除这四种操作方式,那么就可以在系统中建立Resource=用户管理,Operate分别为查看、新增、编辑、删除,每种操作相应的对应一个url,这个在MVC框架中就更好去做了,通常一种动作对应了一个command类,那么其url可能是view.cmd等,^_^,这样用户管理的几种操作权限就配置好了,系统管理员则相应的可增加用户管理员、用户管理查看员等来配置相应的权限,在实现的模型中判断则可通过类似user.doPrivilege("用户管理","查看")来判断用户是否具有权限,这种模型对控制菜单树的显示、操作、模块的功能按钮的显示都具有有效的作用。
但对于具体业务细节的权限控制,还是得通过代码控制来实现的,如控制某某部门的管理员只可对该部门下的权限进行管理,其实想想这个也是可以在url方式的权限模型中实现的,通过url的正则表达方式等来实现,呵呵,不去具体说了,至于对模块产生的数据权限的控制,可以通过数据类型的方式来控制,如某模块产生的数据类型分为公共、私有几种类型,可通过配置角色能访问该模块何种类型的数据来实现。
基于URL方式的权限模型好处在于容易理解,能够快速实现,当然,还有基于action方式的权限模型等等,其实相应来讲基于URL方式的和基于action方式的基本相似,而且基于URL方式的更容易理解和实现。