如何在我的应用中正确设置管理员角色

时间:2015-11-24 07:00:20

标签: ruby-on-rails ruby-on-rails-4

我正在使用"设备"和"命名空间"管理网站,但方法"管理员?" (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

3 个答案:

答案 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这样的宝石可以帮助您