长期以来,在 Rails 项目中权限管理使用cancan
已成为大多数场景下的最佳实践。从我个人经历来说,无论是个人还是公司的项目都不例外。
最近,公司进行业务升级,权限管理的方式也需要改动,从过去的基于固定角色定义改变为基于动态角色定义,并需要开放给相关用户进行自定义的权限设定。而在权限管理的维度上,现阶段产品也并不能给出最终的确定方案。
当这样一个业务需求排上来的时候,经过分析,支撑业务所需要的权限系统需要满足以下几点功能:
而cancan
对于以上几点能给出的解决方案,有,但是太繁琐。所以,开发一套摒弃cancan
并能够满足以上功能的新权限管理模块的想法便产生了。
(依然要向 cancan 致敬,开发中也有部分参考 cancan 的设计)
既然要开发全新的权限系统,就要创造一些新的特性。
不基于 Rails 进行设计,最终的权限控制通过模块注入的方式对 Rails 或其他框架进行适配。
在一个系统中,可定义多个权限模块并各自收集管理权限,互相完全独立。可以解决同项目多系统的权限管理问题。
可以定义上述三种类型的权限并打包为权限集
使用 Redis 保存自定义权限
现阶段为了尽快满足项目需求,还没有加入测试代码,也可能会存在特定场景下功能不完善的情况,所以不建议使用到生产环境或者重要项目中,希望大家有机会试用并提出各种意见,或者 Fork 之后增强功能 (Fix Bug),我也将第一时间进行处理。