如何让设计管理员看到一切?

时间:2014-05-29 19:33:01

标签: ruby-on-rails devise

我通常使用current_user

确定所有内容

例如:

@integrations = current_user.integrations.all

对于故障排除,我希望管理员能够看到所有用户的所有内容。我目前在用户模型上有一个admin: true

的布尔值

为了让管理员看到一切,我一直这样做:

def index

    if current_user.admin?
        @integrations = Integration.all.includes(:user)
        @reports = Report.all
    else
        @integrations = current_user.integrations 
        @reports = current_user.reports
    end
end

我觉得有一种更简单的方法......建议?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以将管理员检查抽象为用户控制器中的受保护/私有方法:

def is_admin
  current_user.admin?
end

然后在控制器的顶部,放置一个先行动来捕捉你想要的任何方法:

class UsersController < ApplicationController
  before_action :is_admin, only: [:index, :show]
  # rest of your code
end

OR

class UsersController < ApplicationController
  before_action :is_admin, except: [:destroy]
  # rest of your code
end

答案 1 :(得分:0)

您可以在application_controller.rb文件中创建受保护的方法。如上所述,它将检查current_user是否为admin。然后,您可以使用条件语句来设置权限。

假设admin是布尔值

def is_admin?
   current_user.admin == true
end

在视图中,您可以说

if current_user.is_admin?
   ........ 
end