我正在使用Devise进行身份验证,我只需要一个简单的管理员或使用检查几个控制器。 我是 rails 的新手,所以我正在尝试以正确的方式做到这一点。 我基本上在用户模型中添加了一个布尔管理字段并添加了此方法
def is_admin?
admin == 1
end
然后我只是将控制器操作修改为此
def new
if current_user.nil? || !current_user.is_admin?
flash[:notice] = "You do not have permission to view this page"
redirect_to "/gyms"
else
@gym = Gym.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @gym }
end
end
end
所以这个解决方案有效,但我应该以不同的方式做到这一点吗?
这将起作用,但我可能不会推荐此解决方案用于小型项目以外的任何其他项目。随着时间的推移,如果您在控制器中执行授权检查,您的代码将变得臃肿且难以管理。
相反,我会考虑使用像Cancan这样的授权模块,它将你的授权规则集中在一个地方,从而将你的应用程序逻辑与你的授权逻辑分离。最终结果是代码更干净、更易于维护。
使用Cancan,您的代码可能如下所示:
# app/controllers/gyms_controller.rb
class GymsController < ApplicationController
load_and_autorize_resource
def new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @gym }
end
end
end
end
# app/models/Ability.rb
can :create, Gym do |trip|
user.is_admin?
end