0

为糟糕的标题道歉,但我无法简洁地表达我想要做的事情。

我有账户,这些账户可以做一些事情,比如创建项目或信用或交易。我需要获得管理员批准才能对这些内容进行任何更改。问题是,所有这些模型都被标记为属于特定州(如美国州)。我需要拥有属于每个州的管理员帐户,并且需要授权对其州内发生的任何事情进行任何更改。例如,如果您在弗吉尼亚州创建一个项目,我需要具有允许弗吉尼亚州管理员进入并批准该项目或批准在弗吉尼亚州发生的任何交易的功能。

我能想到的最好的类比是,在网络论坛中,您的用户是特定论坛的版主,而不是整个网站的版主。

有什么方法可以“标记”属于该模型的任何需要管理员批准的东西吗?

4

1 回答 1

1

cancan这样的宝石值得一看。

您可以在那里定义能力,我相信,这将允许您对所描述的内容进行建模。

因此,例如,您可以定义自己的能力

class Ability
  include CanCan::Ability

  def initialize(user)
    can :manage, Project, :state_id => user.state_id
  end
end

然后,您可以检查用户是否可以在控制器中对项目执行操作的能力,例如:

if can?(:update, @project)
  ...
else
  flash[:notice] = 'You can only manage projects in your state.'
end

Cancan 不仅可以做这个简单的示例,还可以做很多事情,但它可以让您对可能的情况有所了解。

于 2013-08-29T16:50:28.613 回答