如何在使用设备时取消授权用户操作?

时间:2012-11-20 23:55:51

标签: ruby-on-rails-3 devise cancan

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

我在User上添加了几个额外的列。

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

这是如何运作的?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

或者,尝试在ability.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
 ...