3

我将 Ruby on Rails 用于内部站点。该网站的不同用户可以访问各种各样的数据和高度不同的数据观点。在这些不同类别的用户中,需要有访问级别。在访问级别内,我需要能够添加来自其他类别用户的功能。

在已发布的“1.0 版”的内网站点中,我已经实现了一般的用户类别。我现在需要对用户访问进行更细粒度的控制。

问题是如何?

什么是编码用户偏好(显示地图(或不显示);访问此功能,但不是此功能)的普遍接受的做法是不爆炸数据库模式并在任何地方使用 <% if feature_allowed %> 标签填充视图代码。

4

2 回答 2

3

Another totally different approach would be to use acts_as_authenticated and authorization plugins. The tables will be built by the plugins (ie users, roles and roles_users). From the doc:

The authorization plugin provides the following:

  • A simple way of checking authorization at either the class or instance method level using #permit and #permit?

  • Authorization using roles for the entire application, a model class, or an instance of a model (i.e., a particular object).

  • Some english-like dynamic methods that draw on the defined roles. You will be able to use methods like "user.is_fan_of angelina" or "angelina.has_fans?", where a 'fan' is only defined in the roles table.

  • Pick-and-choose a mixin for your desired level of database complexity. For all the features, you will want to use "object roles table" (see below)

于 2008-08-28T20:57:43.527 回答
2

用 <% if feature_allowed %> 标签填充视图代码。

我不认为你想那样做。假设建议的替代方案都不可行,至少您应该考虑将这些检查转移到您的控制器中,在那里您可以将它们重构为 before_filter。

请参阅“使用 Rails 进行敏捷 Web 开发”(我的第 2 版副本中的第 158 页)中的第 11.3 节,他们正是这样做的。

于 2008-08-29T09:41:09.417 回答