0

在我的项目中,我使用设计

但我希望如果用户是管理员,他可以进入所有控制器,但如果用户是普通用户,他可以进入特定控制器

这是我的代码:

 before_filter :authorize!
def authorize!
      unless current_admin.is_admin?
        flash[:alert] = "unauthorized access"
        redirect_to root_path   
      end
    end

我如何在授权方法中获取控制器名称,例如,如果控制器名称是“仪表板”或“站”,普通用户可以看到数据。

谢谢

4

3 回答 3

0

您可以使用controller_name

如果你想获得动作名称 - 使用action_name

于 2013-09-30T08:25:10.620 回答
0

控制器名称在params[:controller]和操作中可用params[:action]

但是我建议添加一个AdminController.rb文件

 #controllers/admin_controller.rb
 class AdminController < ApplicationController::Base
    before_filter :authorize!
    def authorize!
      unless current_user.is_admin?
        flash[:alert] = "unauthorized access"
        redirect_to root_path   
      end
    end    
 end

并继承所有只有管理员才能访问的控制器,如下所示

# controllers/admin_only_controller
class AdminOnlyController < AdminController
end

这样您就可以分别管理普通用户控制器和管理员控制器。

于 2013-09-30T08:45:41.713 回答
0

实际上两个答案都可以

params[:controller] 更好,因为它还包含命名空间。

这是我的最终代码。欢迎任何关于写得更好的想法

def authorize!
    unless current_admin.is_admin?  
        case current_admin.type
            when :station_admin
                station_admin_allows_controllers = ["radio/stations","radio/dashboard"]
                unless station_admin_allows_controllers.include?(params[:controller])
                    flash[:alert] = "unauthorized access"
                    redirect_to root_path   
                end
            end
    end
  end
于 2013-09-30T17:27:32.280 回答