【问题标题】:How do I scope all devise routes by role?如何按角色确定所有设计路线的范围?
【发布时间】:2017-04-24 11:45:58
【问题描述】:

我的用户有不同的角色。例如,一个角色是经理,另一个角色是员工。我能够设置不同的登录和注册,但我希望它们在登录后面都有单独的路由。

class Employee < User 
class Manager < User 

员工可以访问,但经理不能访问

/stock-plan

经理可以访问,但员工不能访问

/salaries

双方均可访问

/my-salary
/my-team

我怎样才能通过设计实现这一点?

我尝试使用身份验证,但我似乎收到了路由错误,即使 rake routes 表明它是可访问的。

authenticated :employees do
    resources :stock_plan 
  end

【问题讨论】:

  • 粘贴路由错误。
  • @seaify-Freelancer 啊,我发现我的认证线路不起作用,因为我使用的是员工的复数形式。

标签: ruby-on-rails devise ruby-on-rails-5


【解决方案1】:

您可以试试这个,例如员工路线。

devise_for :users, path: 'employees', path_names: { sign_in: 'login', sign_out: 'logout' }, controllers: { sessions: 'employees/sessions', passwords: 'employees/passwords', confirmations: 'employees/confirmations', registrations: 'employees/registrations', unlocks: 'employees/unlocks' }

【讨论】:

  • 这只是为了重新映射设计路线。我正在尝试根据角色提供某些路由,并要求基于角色进行身份验证
【解决方案2】:

将此添加到您的工资控制器

before_action :correct_role

private
  def correct_role
    unless current_user.type=="Manager"?
      flash[:danger] = "You have no access"
      redirect_to root_url
    end
  end

我假设你已经添加 before_action :authenticate_user! 在你的控制器中

【讨论】:

    【解决方案3】:

    我发现:employees 不应该是复数

    authenticated :employee do
        resources :stock_plan 
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多