我在Rails 3.1应用程序上使用Devise和Cancan宝石。
我在User上添加了几个额外的列。
我设法定义了能力并且它们工作正常,我可以看到它有效但我还没弄明白我如何取消授权操作(例如:更新),因为我无法访问Devise或用户控制器?
这是如何运作的?
答案 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
...