0

有没有简单的角色教程?我发现Devise是一个很棒且简单的授权解决方案。然后当谈到带有 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

我的问题是 - 我有一种奇怪的感觉,检查是否有能力。可以吗?:delete, :all在这个例子中是多余的。那么我的代码没问题还是我真的弄错了?谢谢

4

2 回答 2

1

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

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

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

于 2012-05-31T23:38:13.780 回答
0

我认为您的“破坏”方法可以是:

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

 respond_to do |format|
   ...
end

因为在cancan的文档中:

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

于 2012-12-27T06:54:20.223 回答