我目前的代码是这样的。
只有发布的用户才能销毁自己的记录
但是我想启用admin(user.id = 1)来删除所有记录。
我该怎么改变?还看?任何聪明的方式?
/models/ability.rb
def initialize(user)
if user
can :read, :all
can [:create, :destroy], Comment, {:user_id => user.id}
can [:destroy], Comment, {:commentable_id => user.id, :commentable_type => user.class.name}
can [:create, :update], Community, {:user_id => user.id}
else
can :read, :all
end
end
查看
<%= link_to 'x', polymorphic_path([@user, comment]),
:data => { :confirm => 'Do you want to delete?' },
:method => :delete, :disable_with => 'Deleting',
:remote => true,
:class => 'close'
if current_user && current_user.id == comment.user_id || current_user && current_user.id == comment.commentable_id %>
答案 0 :(得分:1)
这是你需要的。顺便说一句,使用user.id == 1
来检查管理员权限是个坏主意,可能更好的解决方案是将布尔admin
字段添加到User
模型。如果您不想这样做,可以将if user.admin?
替换为if user.id == 1
。
def initialize(user)
guest_ability
user_ability(user) if user
admin_ability if user.admin? # or `if user.id == 1` if you don't want to add `admin` field
end
private
def admin_ability(admin)
can [:destroy], Comment
end
def user_ability(user)
can :read, :all
can [:create, :destroy], Comment, { :user_id => user.id }
can [:destroy], Comment, { :commentable_id => user.id, :commentable_type => user.class.name }
can [:create, :update], Community, { :user_id => user.id }
end
def guest_ability
can :read, :all
end
在您看来:
<% if can? :destroy, comment %>
<%= link_to 'x', polymorphic_path([@user, comment]),
:data => { :confirm => 'Do you want to delete?' },
:method => :delete, :disable_with => 'Deleting',
:remote => true,
:class => 'close' %>
<% end %>
答案 1 :(得分:1)
在你的异能文件中,你应该区分用户可以拥有的各种角色,所以你应该添加像
这样的东西。if user.has_role? :admin
can :destroy, Comment
end
在您看来,您现在应该使用罐头而不是自己做的工作&#34;,而不是现在正在做的事情?方法,如下
if can? :destroy, comment
使用可以吗?将使用您在能力文件中描述的路线。就这么简单!