Gem RoleCore —— SaaS 快速开发套件之快速搭建 RBAC 系统

jasl · April 25, 2018 · Last by canonpd replied at September 20, 2019 · 7058 hits

项目地址: https://github.com/rails-engine/role_core

接上一弹 FormCore —— SaaS 快速开发套件之动态表单系统

通过 RoleCore 你可以快速的搭建 RBAC 系统,如图所示(参见项目的 Readme 在本地体验)

Dummy app 实现了多角色权限系统、集成 CanCanCan 并且包含了一套管理界面

RoleCore 的实现也非常简单,总代码量约 200 行,没有任何高深技巧

RoleCore 解决了什么问题

角色模型

RBAC 最核心的要素就是角色,并且根据需要有多种可能性:单角色、多角色、角色可继承、角色应用在多种资源上(如组、用户) RoleCore 提供了最基本的 Role 模型的定义(以及数据迁移), 在此之上,只需要添加最基本的模型关联,就可以适应多种场景下的需要, 如:

  • 单角色系统:增加角色到用户的一对多关联
  • 多角色系统:增加角色到用户的多对多关联
  • 角色可继承:增加角色的自关联
  • 角色可作用在多种资源:为角色增加多态关联

Readme 中包含了对于单角色和多角色的集成说明

权限定义

RoleCore 提供了一套类似 Rails 路由声明风格的 DSL(示例,灵感来自于 Redmine), 通过虚拟模型的手法,可以将权限转化成 Role 模型的 permissions 的虚拟关联模型并以序列化的方式持久化入数据库, 在使用时完全以面向对象显式调用方法的方式去检查权限,形如 role.permissions.project.create?(具体使用方式参考 Gem 的 Readme)

并且,权限定义支持分组,分组支持嵌套。

此外还有 I18n 支持。

本质上,权限列表可以理解成散列表,键为权限名,值为布尔类型,表示是否拥有权限,于是,多角色和角色继承的最终权限集合可以转化成对散列表的操作,基于此原理,可以灵活多变的支持如角色继承等各种业务需要。

管理 UI

基于虚拟模型手法,权限会被转换成虚拟模型的字段,分组会转换成嵌套子模型(类似 Mongoid 的 embeds_one),并且权限模型实现了 ActiveModel 接口,所以你可以在前台像一般的模型一样使用各种 Rails 提供好的 FormBuilder,后台也可以使用 StrongParameter 来过滤一些敏感的权限的设置。

Dummy app 中给出了一个例子,寥寥几行 便可实现截图中的权限列表表单。

对于前后端分离的项目,虽然不需要后端渲染方面的支持,但受益于 ActiveModel,可以很轻易的导出 Json,后端享受 StrongParameter 带来的安全性保障

权限检查

RoleCore 本身 解决权限检查工作,基于上文所述检查权限方法,你可以利用 before_action 快速实现访问控制,并且,RoleCore 可以非常容易的和成熟的访问控制库(如 CanCanCan)进行集成。

访问控制作为系统的关键组件,由成熟的库来实现可以有效地降低风险,并且也减少了额外学习的成本。

赞大佬!~

jasl in 反模式之虚拟模型模式及其应用 mention this topic. 20 Jun 17:18
7 Floor has deleted

这么好的项目,我好不容易遇到。 自己折腾了好几天 cancancan + rolify,想尽办法用数据库来管理权限,所有思路都已经整理清楚,正要开工。 突然发现了这个项目,这下舒服了,bundle install。。。。收工 给楼主点 10000 个赞!

You need to Sign in before reply, if you don't have an account, please Sign up first.