我正在使用Ruby on Rails作为内部网站。该站点的不同用户可以访问各种各样的数据和高度不同的数据视角。在这些不同类别的用户中,需要具有访问级别。在访问级别内,我需要能够添加其他类用户的功能。
在Intranet网站发布的“1.0版”中,我实现了一般用户类。我现在需要对用户访问实施更精细的控制。
问题是如何?
对于编写用户首选项(显示地图(或不显示);访问此功能,但不访问此功能)的普遍接受的做法是什么,而不会爆炸数据库模式并使用<%if feature_allowed%填充视图代码>标签无处不在。
答案 0 :(得分:3)
另一种完全不同的方法是使用acts_as_authenticated和授权插件。这些表格将由插件构建(即用户,角色和角色 _users)。来自doc:
授权插件提供以下内容:
在类或实例方法中检查授权的简单方法 使用#permit和#permit?
使用整个应用程序,模型类或角色的角色进行授权 模型的实例(即特定对象)。
一些类似英语的动态方法,可以利用已定义的角色。你将会 能够使用像“user.is_fan_of angelina”或“angelina.has_fans?”这样的方法, 其中'粉丝'仅在角色表中定义。
选择一个mixin,以达到所需的数据库复杂程度。对于 所有功能,您将需要使用“对象角色表”(见下文)
答案 1 :(得分:2)
使用<%if填充视图代码 feature_allowed%>标签无处不在。
我认为你不想这样做。假设所提出的替代方案都不可行,至少应考虑将这些检查转移到您的控制器中,您可以将它们重构为before_filter。
请参阅“使用Rails进行Agile Web开发”(第2版副本中的第158页)中的第11.3节,他们就是这样做的。
答案 2 :(得分:1)
答案 3 :(得分:0)
这是我正在寻找的更多...发布在这里以供将来参考。
http://metautonomo.us/2008/09/30/easy-role-based-authorization/