我正在使用"设备"和"命名空间"管理网站,但方法"管理员?" (current_user.admin?),它来自哪里?如果它应该是我桌上的一个字段" user"?当它成为一种方法?
class Admin::ApplicationController < ApplicationController
before_action :authorize_admin!
def index
end
private
def authorize_admin!
authenticate_user!
unless current_user.admin?
redirect_to root_path, alert: "You must be an admin to do that."
end
end
end
答案 0 :(得分:0)
您可以通过以下两种方式之一完成此操作:
一,正如@SergioTulentsev回答的那样:你可以添加一个列名admin
,其数据类型为boolean,默认值为false。
- 使用命令创建迁移文件:
rails g migration add_admin_to_users admin:boolean
之后你继续进行迁移文件编辑:
def change
add_column :users, :admin, :boolean, default: fase
end
运行后:rake db:migrate
current_user.admin?
或者,您可以在用户模型中创建实例方法,以检查用户是否为admin 例如,在用户模型中,您可以创建方法:
def admin?
seff.name == "admin"
end
您可以查看以下内容:current_user.admin?
答案 1 :(得分:0)
您在应用中添加管理员的方法功能不大,如果您需要添加更多角色,该怎么办?
我的建议是为Rolify等角色使用gem,使用Rolify可以创建任何角色,并使用像Cancancan这样的gem for allow and deny perms
例如,使用Rolify,您可以添加admin
角色,如下所示:
user = User.find(1)
user.add_role :admin
然后使用Cancancan,您可以为每个控制器操作或每组控制器操作定义perms,假设您有一个模型Post
,只有管理员可以管理它们:
#app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :admin
can :manage, :all
else
can :read, :all
end
end
end
以上是告诉我:admin
角色可以管理您应用中的所有模型,而所有其他角色(包括访客用户)都可以阅读您应用中的所有模型。有关定义权限的更多信息,请查看Wiki of Cancancan
现在,如果您想在用户尝试输入非授权资源时显示消息,您可以挽救Cancancan的例外情况:
#In your application_controller.rb
rescue_from CanCan::AccessDenied do |exception|
if exception.message.match(/are not/i)
redirect_to root_path, :alert => "Oouch... no estás autorizado para acceder a esta página"
else
redirect_to root_path, :alert => exception.message
end
end
Rolify和Cancancan可以与Devise顺利集成,因此现在可以在您的应用中创建角色和权限。我希望能帮到你。
答案 2 :(得分:-2)
管理员可能是您在模型用户中定义的一些功能,像cancancan这样的宝石可以帮助您