0

我在 Rails 3.1 应用程序上使用 Devise 和 Cancan gem。

我向用户添加了几个额外的列。

我设法定义了这些能力并且它们工作正常,我可以看到它工作但我还没有弄清楚如何取消授权操作(例如:更新),因为我无权访问设计或用户控制器?

那是怎么工作的?

4

2 回答 2

1

向用户添加一个字段,比如说:approved并使其只有管理员可以访问。

在您的 中编写一个过滤器ApplicationsController,因为您将所有内容都保持干燥,一旦您开始使用授权,您将大量使用它。

def verify_approval
  unless current_user.approved
    flash[:error] = I18n.t("not_approved")
    redirect_to(root_path)
  end 
end

然后在用户需要权限的地方使用该过滤器:

class RandomsController
  before_filter :verify_approval, only: [:update]

巴姆,完成。没有编辑设备或UsersController.

于 2012-11-21T01:00:12.650 回答
1

或者,尝试在能力.rb 中使用以下内容

 if user.role? :admin
  can [:create, :read], [Model1, Model2]
 end

 if user.role? :user
  can [:read], Model1, :id => user.id
 end

这将允许管理员创建或阅读但不能更新。并允许用户读取属于他们的 Model1。如果您创建自定义操作,例如“copy_model”,您可以将其添加到 ability.rb

 ...
 can [:copy_model, :read], Model1, :id => user.id
 ...
于 2012-11-21T01:21:07.153 回答