您可以使用CanCan gem。安装后,CanCan 将生成一个“能力”文件,您可以在其中定义用户可以做什么或不可以做什么。例如,在你的情况下,你可能有
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
然后在你的视图中,你可以做一个简单的检查,看看用户是否有能力修改那个对象。例如:
<% if can? :destroy, shop %>
<td><%= link_to 'Destroy', shop, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
在您的控制器中,您可以授权如下操作:
class ShopsController < ActionController::Base
load_and_authorize_resource
def destroy
....
end
end
“load_and_authorize_resource”行会自动将授权添加到每个 RESTful 操作中。它会将其添加到您的销毁操作中,例如:
@shop = Shop.find(params[:id])
authorize! :destroy, @shop
这是一个超级有用的宝石,并且有据可查