Использование устройства с двумя типами похожих пользователей - PullRequest
2 голосов
/ 01 февраля 2011

Я знаю, что об этом спрашивали много раз, но я не могу найти хороший ответ.

В моем приложении будут и продавцы, и пользователи. Структура таблиц для обоих была бы почти идентична, поэтому я бы предпочел использовать одну таблицу и логическое поле с именем "is_merchant".

Я бы предпочел отдельные страницы регистрации (пользователи / новые и продавцы / новые), но хотел бы использовать одну и ту же страницу входа для всех пользователей (/login).

Я бы очень хотел использовать Devise для аутентификации. Тем не менее, с разработкой такого типа системы SEEMS будет трудно достичь. Это тот случай? Любые хорошие руководства или советы, на которые я могу взглянуть? Если Devise не является лучшим решением для этого, какие-либо рекомендации для другой системы аутентификации (примечание: хотели бы упростить в будущем добавление аутентификации Facebook)?

Заранее большое спасибо!

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Думали ли вы об использовании ролей?Вы можете использовать камень канкан для этого.Вы, вероятно, захотите больше, чем просто is_merchant.Например, как насчет is_admin?В этот момент вам лучше использовать роли.https://github.com/ryanb/cancan

Позже вы можете добавить аутентификацию Facebook с помощью Omni-auth.

Просто для ясности, Devise предназначен для включения вашей собственной системы аутентификации, а Omni-auth - для аутентификации через такие сайты, как Facebook, твиттер и т. д.

0 голосов
/ 05 мая 2012

Вы также можете удалить спецификацию модуля :validatable для устройства в вашей пользовательской модели и добавить validates_uniqueness_of с :scope, установленным на :is_merchant.Это позволяет вам использовать методы проверки ActiveRecord вместо методов Devise.

Использование :scope в validates_uniqueness_of позволяет проверять уникальность нескольких столбцов.

user.rb:

class User < ActiveRecord::Base

  # ...

  validates_uniqueness_of :email, :scope => :is_merchant

  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable #, :validatable <- removed

  # ...

end

В вашемПри регистрации нового пользователя укажите значение is_merchant в форме регистрации.

new.html.erb

<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

  <%=f.hidden_field :is_merchant, :value => 1 %> # used hidden for my implementation

  # ... other inputs

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