Rails 4授权gem

mys*_*eim 10 authorization ruby-on-rails-4

我正在寻找导轨4的授权宝石.在我使用cancan之前,它现在看起来已经过时了......

我在这里找到了the_role https://github.com/the-teacher/the_role 这几乎是我想要的,但有一些恼人的问题.也许存在类似的宝石?我需要角色,在数据库中存储角色以及在规则中存储关联操作.如果宝石与bootstrap合作,它会很棒.

PS对于身份验证我使用设计.

Dan*_*hoe 30

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以及简单的基于角色的授权.


Dav*_*ard 5

您甚至应该在Ruby之外查看全局,并考虑授权模型。传统的流行模型是基于角色的访问控制(RBAC),这是大多数框架以及大多数gem实现的(在Ruby中)。

但是,如果您有更高级的方案,则需要考虑基于属性的访问控制和XACML(可扩展访问控制标记语言)。

使用XACML,您可以实现基于策略的上下文感知授权。例如,您可以编写如下规则:

  • 经理可以编辑他们拥有的文档
  • 医生可以查看分配给他们的患者的病历

等等...

我不知道有任何Ruby宝石可将XACML应用于您的Ruby项目,但是XACML的性质使您可以轻松实现自己的授权代理(执行点)。我已经用PHP,Java,.NET和Perl编写过一些。

您将需要一个授权引擎。有几种开源和供应商解决方案,例如SunXACML和Axiomatics。

以下是一些有趣的资源:

  • 有人可能不赞成您的答案,可能是因为@mystdeim要求“小狗”,而您正试图给他一个“恐龙” :) (11认同)
  • 如果您对某个问题投反对票,请解释原因。 (2认同)
  • 这是很好的背景阅读,但原始海报专门寻找 ruby​​ 和 rails,因此这不会推进特定的、可实施的解决方案。 (2认同)

Mos*_*man 3

Cancancan 是 can can 的新版本:

https://github.com/CanCanCommunity/cancancan