Devise / CanCan - ограниченный контент - PullRequest
1 голос
/ 17 февраля 2012

Создание рельсового приложения B2B, которое будет иметь разных пользователей.Я довольно четко ограничиваю доступ для внутреннего персонала с помощью Devise и CanCan, но я хочу иметь возможность предоставить поставщикам и клиентам также свой собственный логин.Клиент будет довольно простым, однако я хочу убедиться, что логин поставщика (ярлык) позволяет ему просматривать и изменять только свои собственные данные о продукте и продажах.

Модель примерно равна:

User (as setup by Devise)
Label [has_many releases]
Release [belongs_to label / has_many products]
Product [belongs_release / has_many tracks]
Track [belongs_product]

Полагаю, я мог бы добавить поле label_id в модель пользователя и связать его таким образом, но мне нужны внутренние пользователи (и клиенты), чтобы иметь доступ для просмотра всех данных метки.Мне также нужно разрешить метке иметь много пользователей.

Будет ли это просто случай определения роли «метки» через Cancan, который навязывает использование label_id в представлениях?Если это правильный подход, как мне тогда заблокировать контент с этим label_id в моих контроллерах / представлениях?Ролевые заявления if?

Заранее спасибо!

1 Ответ

2 голосов
/ 17 февраля 2012

Сначала вам нужно определить некоторые роли CanCan, такие как поставщик, клиент и персонал, а затем создать промежуточный контроллер для обработки разветвления:

class CheckingController < ApplicationController
  def index
    @path = case user.role
      when 'supplier'
        supplier_path
      when 'customer'
        customer_path
      when 'staff'
        staff_path
      else
        admin_sign_in_path #or whatever
    end

    redirect_to @path     
  end
end

Затем в своем файле routes.rb вы можете отправлять пользователей в действие root или index вашего контроллера, сначала отправив их на CheckingController#index, который будет перенаправлять на основе ваших ролей CanCan.

...