Rails3 и Devise как часть базовой CRM - PullRequest
2 голосов
/ 22 августа 2011

Мы создали пользовательскую CRM для управления нашими клиентами и заказами в Rails3 с разработкой для аутентификации и умением использовать магию разрешений.

В компаниях много людей, заказов и счетов.Довольно просто.

Кроме того, у нас есть разработчики, которые могут войти в систему и т. Д.

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

Изначально я, хотя все должны быть добавлены через регистрацию devise, но я не уверен, что это правильно.

Я надеюсь, что кто-то попробовал это или может поделиться некоторыми советами.Есть ли хороший, простой способ добиться этого?

- РЕДАКТИРОВАТЬ -

В дополнение к ответам ниже я обновился, чтобы прояснить ситуацию немного яснее.

Мы должны иметь возможность добавлять пользователей в CRM, не назначая их администратором ИЛИ не предоставляя им пароль (на который, похоже, настаивает устройство).

  1. Создание клиента/ пользователь с пустым / без пароля
  2. Если клиенту необходимо войти в систему, отметьте флажок администратора и укажите роли (через канкан)
  3. Снятие флажка администратора должно запретить доступ

В настоящее время у нас есть список людей, который является отдельным от нашего списка разработчиков.Мы хотим как-то совместить.

Ответы [ 4 ]

4 голосов
/ 28 августа 2011

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

Но во многих случаях вам нужно больше, чем роль пользователя, чтобы запретить или разрешить доступ, вам необходимо проверить, например, запросил ли current_user текущий ордер. Так что вы можете сделать это:

Предположим, у вас есть эта модель:

class User < ActiveRecord::Base
  devise :database_authenticatable, :confirmab...
  ...

  def admin?
    role == 'admin'
  end
end

Таким образом, вы можете проверить роль пользователя с помощью некоторого метода в вашей модели, например admin?.

Теперь вы можете использовать Can Can для авторизации, как вы можете см. Здесь , как определить ваши способности.

Класс способностей:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.admin?
      can :manage, :all
    else
      can :read, :all
    end
  end
end

Понять, как работает CanCan, очень важно: посмотрите здесь .

Предположим, вы хотите получить параметры в свой класс способностей, который позволяет вам проверять объекты в вашей базе данных перед загрузкой страницы, разрешая или не предоставляя пользователю доступ. В вашем файле application_controller поместите что-то вроде этого:

  ...
  def current_ability
    @current_ability ||= Ability.new(params, current_user)
  end
  ...

В ваших силах изменить аргументы метода инициализации и использовать params по мере необходимости:

class Ability
  include CanCan::Ability

  def initialize(params, user)
    user ||= User.new # guest user (not logged in)
    if user.admin?
      can :manage, :all
    else
      # Verify the record for atuhorization
      can :manage, Order if Order.find(params[:id]).requester_id == user.id
    end
  end
end
3 голосов
/ 27 августа 2011

Если ваше приложение не ориентировано на пользователя (например, части вашего приложения не ограничены пользователем), и вход в систему необходим только для небольшой части «людей», вы можете иметь пользовательские функции (роли аутентификации и т. Д.)добавлен с отношением один к одному:

class Person < AR::Base
  has_one :user
  belongs_to :company 
  ...
end

class User < AR::Base
  belongs_to :person
  devise :database_authenticatable, ...
end

Таким образом, вы можете импортировать ваших клиентов в виде простой базы данных (не беспокоясь о проверке разработки), а затем добавить небольшой набор «пользователей».

Это также достаточно гибко: всякий раз, когда кому-то нужен доступ к вашей панели администратора или когда вы хотите изменить приложение на функцию пользователя (например, у каждого пользователя есть своя собственная страница и т. Д.), Вы можете легко обновить ее, не нарушая модель вашего домена....

Это чистое разделение забот

0 голосов
/ 28 августа 2011

Создать клиента / пользователя с пустым / без пароля:

Для этого вам нужно переопределить (фактически украсить) процесс проверки, который не позволяет вам создать пользователя без пароля

class User < AR

  devise :database_authenticatable, validatable #, etc..

  module ValidatableDecorator
    # commented are the original methods
    #def password_required?
    #  !persisted? || !password.nil? || !password_confirmation.nil?
    #end

    #def email_required?
    #  true
    #end

    def password_required?
      myspecial_condition && super
    end

    def email_required?
      my(other)special_condition && super 
    end

    def myspecial_condition
      false #if ...someattribute is false
    end
  end
  include ValidatableDecorator
end

Другим решением является создание пароля .... но сначала прочтите ниже

Если клиенту необходимо войти в систему, отметьте флажок администратора и укажите роли (с помощью cancan)

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

Я предлагаю вам воспользоваться восстанавливаемым модулем, предоставленным devise, который отправит ему электронное письмо с секретной ссылкой, чтобы позволить ему сбросить пароль (за исключением того, что у него еще нет

Снятие флажка администратора должно запретить доступ

Предоставить / отменить права администратора довольно просто: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role

0 голосов
/ 26 августа 2011

Если я понял, что вы имеете в виду, самый простой способ - использовать логический admin в вашей пользовательской модели. Вот и все!

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