我正在寻找导轨4的授权宝石.在我使用cancan之前,它现在看起来已经过时了......
我在这里找到了the_role https://github.com/the-teacher/the_role 这几乎是我想要的,但有一些恼人的问题.也许存在类似的宝石?我需要角色,在数据库中存储角色以及在规则中存储关联操作.如果宝石与bootstrap合作,它会很棒.
PS对于身份验证我使用设计.
CanCanCan
CanCan是由Ryan Bates(最着名的RailsCasts)开发并在Rails 4.0发布之前放弃授权的流行宝石.由于其受欢迎程度,基于社区的CanCanCan项目维护了CanCan的更新版本.CanCan提供DSL(特定于域的语言),可隔离单个Ability类中的所有授权逻辑.
权威人士
该权威人士宝石日益普及Rails的授权.Pundit是一个授权系统,它使用简单的Ruby对象来访问规则.Pundit使用名为app/policies /的文件夹,其中包含实现访问规则的纯Ruby对象.
CanCanCan或Pundit还是?
随着应用程序的复杂性增加,CanCan Ability类可能变得笨拙.此外,每个授权请求都需要评估完整的CanCan Ability类,从而增加了性能开销.Pundit还提供了将访问规则分隔到中心位置的优势,使控制器保持紧凑.Pundit策略对象是轻量级的,添加授权逻辑而没有CanCan那么多的开销.
简单的基于角色的授权
使用Rails 4.1,您可以使用Active Record Enum实现基于角色的授权.如果您的访问规则很复杂,您可以使用CanCanCan或Pundit来保持控制器瘦,但是对于简单的要求,您可能不需要CanCanCan或Pundit.
我写了一篇关于Rails授权的文章,详细介绍了CanCanCan和Pundit以及简单的基于角色的授权.
您甚至应该在Ruby之外查看全局,并考虑授权模型。传统的流行模型是基于角色的访问控制(RBAC),这是大多数框架以及大多数gem实现的(在Ruby中)。
但是,如果您有更高级的方案,则需要考虑基于属性的访问控制和XACML(可扩展访问控制标记语言)。
使用XACML,您可以实现基于策略的上下文感知授权。例如,您可以编写如下规则:
经理可以编辑他们拥有的文档
医生可以查看分配给他们的患者的病历
等等...
我不知道有任何Ruby宝石可将XACML应用于您的Ruby项目,但是XACML的性质使您可以轻松实现自己的授权代理(执行点)。我已经用PHP,Java,.NET和Perl编写过一些。
您将需要一个授权引擎。有几种开源和供应商解决方案,例如SunXACML和Axiomatics。
以下是一些有趣的资源:
NIST RBAC -RBAC模型的正式定义
NIST ABAC
OASIS XACML