Пользовательские модели и роли - PullRequest
0 голосов
/ 10 января 2019

Каков наилучший способ реализации ролей? По сути, я хочу одну модель пользователя. Но я хочу двух разных типов пользователей. 1) постоянный пользователь, у которого они могут покупать продукты. 2) второй пользователь - продавец. Этот пользователь может добавлять и удалять продукты.

Как я могу добавить продавца к пользователю? Я бы хотел, чтобы у покупателя и продавца были одинаковые взгляды. Можете ли вы привести пример, пожалуйста?

В настоящее время у меня есть модель пользователя (разработка) и модель продуктов.

Ответы [ 4 ]

0 голосов
/ 10 января 2019

Я хотел бы предложить разные модели и таблицы для покупателей и продавцов, так как это логически разные объекты. CustomerModel будет взаимодействовать с вашими клиентскими приложениями, а SellerModel будет взаимодействовать с вашим внутренним приложением. На мой взгляд, это лучший способ.

Тем не менее, если вы хотите, чтобы они были в одной таблице, я бы предложил добавить столбец типа в таблицу users и затем использовать принципы наследования Single table. Преимущество STI состоит в том, что вы можете сделать свой код гораздо более модульным и добавить методы, специфичные для покупателей и продавцов в их соответствующих моделях, которые, в свою очередь, наследуются от UserModel.

Вот ссылка для наследования одной таблицы, которая может быть полезна: Объяснение наследования одной таблицы

Для контроля доступа вы можете использовать драгоценный камень Pundit. Вот ссылка github для того же самого.

0 голосов
/ 10 января 2019

Вы можете добавить столбец user_type для пользователя. Вы можете установить значение по умолчанию buyer или предоставить список выбора типа для create/update формы пользователя.

Далее вы можете использовать cancancan gem для определения разрешений для них

0 голосов
/ 10 января 2019

Вы можете использовать камень cancancan. И добавьте столбец продавец (логическое значение) в таблицу пользователей.

Тогда на способность.rb

if user.present?
  can :read, Product
end

if user.seller?
 can :manage, Product, user_id: user.id     
end

Это, если товар принадлежит пользователю, позволит продавцам создавать / редактировать / удалять свои товары (если товары являются общими для всех продавцов, вы можете удалить часть user_id: user.id).

Пока все остальные (покупатели) могут видеть все товары. Если они покупают, вероятно, они могут создать заказ или как вы его назовете ..

0 голосов
/ 10 января 2019

Я не знаю, лучший ли это способ, но вот пример того, как это можно сделать. Использование enum:

 class User < ApplicationRecord

  devise :database_authenticatable, :rememberable, :trackable, :validatable, :lockable,
         authentication_keys: [:login], password_length: 4..32, unlock_strategy: :time

  enum available_roles: {buyer: 100, seller: 101}

  def buyer?
    has_role?(User.available_roles[:buyer])
  end

  def seller?
    has_role?(User.available_roles[:seller])
  end

  def has_role?(role)
    roles.include?(role)
  end

end

Для использования разрешений (например, только продавец может добавлять и удалять товары) вы можете использовать библиотеку cancancan https://github.com/CanCanCommunity/cancancan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...