我正在寻找rails 4的授权宝石。 在我使用cancan之前,它现在看起来已经过时了......
我在这里找到了the_role https://github.com/the-teacher/the_role 这几乎是我想要的,但有一些恼人的问题。也许存在类似的宝石?我需要角色,在数据库中存储角色以及在规则中存储关联操作。如果宝石与bootstrap配合,它会很棒。
P.S。对于身份验证,我使用设计。
答案 0 :(得分:30)
<强> CanCanCan 强>
CanCan是由Ryan Bates(最着名的RailsCasts)开发并在Rails 4.0发布之前放弃授权的流行宝石。由于受欢迎,基于社区的CanCanCan项目维护着CanCan的更新版本。 CanCan提供了一种DSL(特定于域的语言),可以在一个Ability类中隔离所有授权逻辑。
<强>权威人士强>
Pundit gem越来越受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 Authorization 的文章,详细介绍了CanCanCan和Pundit以及简单的基于角色的授权。
答案 1 :(得分:4)
即使在Ruby之外,您也应该考虑更大的图景并考虑授权模型。传统的普遍模型是基于角色的访问控制(RBAC),这是大多数框架和 - 在Ruby中 - 大多数宝石实现的。
但是,如果您有更多高级方案,则需要考虑基于属性的访问控制和XACML,即可扩展访问控制标记语言。
使用XACML,您可以实现基于策略的上下文感知授权。例如,您可以编写如下规则:
等等......
我不知道任何Ruby gem将XACML应用于您的Ruby项目,但XACML的本质是您可以轻松实现自己的授权代理(执行点)。我用PHP,Java,.NET和Perl编写了一些文章。
您需要一个授权引擎。有一些开源和供应商解决方案,如SunXACML和Axiomatics。
以下是一些有趣的资源:
答案 2 :(得分:3)
Cancancan是罐头的新版本:
答案 3 :(得分:2)
Action Access适用于Rails 4,语法非常清晰,而且非常轻量级。
归结为:
class ArticlesController < ApplicationController
let :admin, :all
let :user, [:index, :show]
# ...
end
这将自动锁定控制器,允许管理员访问每个操作,用户仅显示或索引文章,其他任何人都将被拒绝并通过警报重定向。
与控制器相关的一切都在控制器内,使其真正模块化,避免在重构时留下被遗忘的垃圾。
对于粒度控制,您可以使用not_authorized!
内部操作来检查数据库中的数据或您需要的任何内容。
它完全独立身份验证系统,即使没有User
模型或预定义角色,它也可以正常工作。您所需要的只是设置当前请求的许可级别:
class ApplicationController < ActionController::Base
def current_clearance_level
session[:role] || :guest
end
end
您可以返回应用所需的任何内容,例如current_user.role
。
它还捆绑了一组方便的模型添加,允许扩展用户模型并执行以下操作:
<% if current_user.can? :edit, :article %>
<%= link_to 'Edit article', edit_article_path(@article) %>
<% end %>
此处:article
引用ArticlesController
,因此只有当前用户有权访问edit
中的ArticlesController
操作时,才会显示该链接。 命名空间也受支持。
您可以默认锁定控制器,自定义重定向路径和警报消息等。查看documentation以获取更多信息。
答案 4 :(得分:0)
Pundit和Cancancan是用于导轨4的最佳宝石