使用Rolify了解Rails 3.2中的角色

时间:2012-05-31 23:32:29

标签: ruby-on-rails authentication devise roles cancan

是否有任何简单的角色教程?我发现Devise很棒&轻松解决授权问题。然后谈到Cancan with Rolify时,像我这样的初学者会出现混乱的日食。

目前我在 ability.rb

中定义了角色
if user.has_role? :admin
  can :manage, :all
else
  can :read, :all
end

然后,在控制器中,我在这个例子中进行检查:

def destroy
 ability = Ability.new(current_user)
 if ability.can? :delete, :all then
   @post = Post.find(params[:id])
   @post.destroy
 end

 respond_to do |format|
   ...
end

我的问题是 - 我有一种奇怪的感觉,检查 if ability.can? :delete,:all then then 在本例中是多余的。那么我的代码是好还是我真的弄错了?感谢

2 个答案:

答案 0 :(得分:1)

检查是否可以删除相关帖子更有意义。管理员可以删除任何内容,但普通用户只能删除他们拥有的内容。

@post = Post.find(params[:id])
authorize! :delete, @post

我还建议您花一些时间阅读cancan的文档,因为您的代码并不真正匹配。

答案 1 :(得分:0)

我认为你的“破坏”方法可能就像:

def destroy
 @post = Post.find(params[:id])
 if can? :delete, @post then 
   @post.destroy
 end

 respond_to do |format|
   ...
end

因为在cancan的doc:

  

然后可以使用can检查当前用户的权限?和   不能?视图和控制器中的方法。