我正在使用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
所以这个解决方案有效,但我应该以不同的方式做这个吗?
答案 0 :(得分:2)
这样可行,但除了小规模项目之外,我可能不会推荐这个解决方案。随着时间的推移,如果您在控制器中执行授权检查,您的代码将变得臃肿且难以管理。
相反,我会考虑使用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