一、权限的分类
一级权限 基于一级导航 比如:用户管理(此权限用户管理模块(控制器为User)的一级权限,同时是导航,但其本身不具备任何操作,仅仅是给予当前有此权限的用户显示用的)
用户管理
二级权限 基于二级导航及控制器和方法 比如:用户列表(此权限为用户管理模块下的list操作(User/list),可以控制用户是否有权限查看用户,同时可以作为二级导航)
用户管理→用户列表
用户管理→添加用户
用户管理→编辑用户
用户管理→删除用户
三级权限 权限的最小粒度,比如用户列表(User/list)权限继续细分权限,可以选择允许当前用户查看某一个角色的用户,比如销售、客服,查看某一个时间段注册的用户,比如1月份新注册的用户,
同时,三级权限之间有相互的关系,比如查看销售和查看客服之间为独立关系,可以同时选择,也可以选择其中一个,而查看全部包含其他所有用户列表的三级权限,这就导致了如果用户拥有查看全部权限,那么就同时赋予的用户所有权限。
用户管理→用户列表(查看销售、查看客服、最近1个月注册的新用户、查看全部、筛选用户)
用户管理→添加用户(添加销售、添加客服、添加全部)
用户管理→编辑用户(编辑销售、编辑客服、编辑全部)
用户管理→删除用户(删除销售、删除客服、删除全部)
二、权限的验证
对于一级权限和二级权限的验证都比较简单,根据控制器和方法就可以验证,而对于三级权限的验证比较复杂,因为三级权限标识符可能仅仅是一个符号,其本身并不和当前访问的控制器方法有任何关联,比如当前管理员要查看用户列表User/list,同时只可以查看销售SHOWSALES,那么在查看的时候就需要验证用户是否有查看销售的权限,如果有,那么就在筛选的时候加入用户类型限制条件,其本质其实是一个条件,那么为了防止权限逐渐增多后导致的权限验证的混乱,那么需要以每个控制器为单位,在其下构造函数增加相关方法的权限控制