限制不同类型的管理员以访问彼此的路由

时间:2017-11-14 18:06:11

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

我正在使用管理员面板,我有不同级别的管理员。我在数据库中有一个字段“admin_type”来表示管理员的级别。水平是1,2,3。现在我想实现一些限制,以便管理员级别1无法访问仅适用于管理员级别2的路由。

我搜索了很多谷歌,发现这篇博文有用http://bjedrocha.com/rails/2015/03/18/role-based-routing-in-rails/ 但是当我实现它时它不起作用并且给出了很多错误 这是路线代码。我希望这条路线只能由管理员级别2访问

constraints RouteConstraint.new do
    get 'admins/donation_analysis' => 'admins#donation_analysis'
end

这是约束类

class RouteConstraint
  def matches?(request)
    user = current_user(request)
    ##render plain: user.inspect
    user.present? && user.admin_type?(:2)
  end

  def current_user(request)
    User.find_by_id(request.session[:user_id])
  end
end

路线

constraints RouteConstraint.new do
    get 'admins/donation_analysis' => 'admins#donation_analysis'
  end
  #get 'admins/active_account/:token' => 'admins#active_account'
  get 'admins/link_expiry' => 'admins#link_expiry'
  get 'admins/edit_profile' => 'admins#edit_profile'
  post 'admins/update_profile' => 'admins#update_profile'
  match '/admins/create_account', to: 'admins#create_account', via: 'post'
  match '/admins/:id', to: 'admins#destroy', via: 'get' , as: 'admin_destroy'

  resources :admins

但它不起作用

enter image description here

1 个答案:

答案 0 :(得分:1)

class RouteConstraint
  def matches?(request)
    user = current_user(request)
    ##render plain: user.inspect
    user.present? && user.admin_type == "2"
  end

  def current_user(request)
    User.find_by_id(request.session[:user_id])
  end
end