一:什么是粗粒度和细粒度权限?
粗粒度权限:对资源类型的权限管理。资源类型比如:url链接,菜单,用户添加页面,页面中按钮,用户信息,类方法等
细粒度权限:对资源实例的权限管理。资源实例就是资源类型的具体化,比如:用户id为001的修改链接,110班的用户信息,行政部的员工,细粒度权限管理就是数据级别的权限管理。比如:部门经理只可以访问本部门的员工,用户只可以看到自己的菜单,大区经理只可以查看本辖区的销售订单
二:如何实现粗粒度和细粒度的权限管理?
如何实现粗粒度权限管理?
粗粒度权限管理比较容易将权限管理的代码抽取出来在系统架构级别统一处理。比如:springmvc的拦截器实现授权。
如何实现细粒度权限管理?
对细粒度级别的权限管理在数据级别是没有共性可言的,针对细粒度权限管理就是系统业务逻辑的一部分,在业务层去处理会相对比较方便,如果在系统架构及别去处理,实现会很困难,即使实现了,可扩展性也不强。
建议细粒度权限管理在service层实现,比如:部门经理查看本部分员工信息,在service中提供一个部门id的参数,controller中根据当前用户的信息得到该用户属于哪个部门,调用service将部门ID传入service,即可实现查询本部门员工的信息。
使用权限管理框架实现:
对于粗粒度的权限管理,可以使用权限管理框架来实现管理,节省开发成本,提高开发效率。
shiro就是一个优秀的权限管理框架。
不使用框架,基于url拦截的方式实现
url拦截方式在实际开发中比较常用
对于web系统,可以使用过滤器,也可以使用springmvc/struts/nutz等框架的拦截器实现。