Aru*_*run 1 ruby-on-rails ruby-on-rails-4
我有一个前端和管理部分。有3个角色super_admin,admin,user。使用super_admin或admin登录时,我应该能够访问/ admin /名称空间,该名称空间正在运行。但是,当我以用户身份登录时,我应该无法访问/ admin /名称空间,它应该重定向404页或索引页。我正在使用cancan限制对控制器的访问。
namespace :admin do
// admin routes
end
//Devise for user model
devise_for :users
//Role model
class Role < ActiveRecord::Base
has_many :users
end
//User model
class User < ActiveRecord::Base
belongs_to :role
end
//Role table columns
id name
1 super_admin
2 admin
3 user
Run Code Online (Sandbox Code Playgroud)
当我以用户角色登录并转到/ admin /路径时,它将重定向到admin部分。如何仅在用户角色的路由中限制它?
小智 5
1)为管理名称空间admin / base_controller.rb添加基本控制器
class Admin::BaseController < ApplicationController
before_filter :restrict_user_by_role
# edit valid roles here
VALID_ROLES = ['super_admin', 'admin']
protected
# redirect if user not logged in or does not have a valid role
def restrict_user_by_role
unless current_user or VALID_ROLES.include?(current_user.role)
redirect_to root_path # change this to your 404 page if needed
end
end
end
Run Code Online (Sandbox Code Playgroud)
2)从Admin :: BaseController继承admin名称空间中的所有控制器
管理员/home_controller.rb
class Admin::HomeController < Admin::BaseController
def index
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1748 次 |
| 最近记录: |