Я хочу реализовать групповые разрешения в моем приложении rails.Какой самый эффективный способ? - PullRequest
1 голос
/ 29 февраля 2012

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

Есть ли стандартный подход к этому в веб-приложениях?

Некоторые примеры того, что я буду хранить:

can_delete_object
can_edit_object
can_create_object
can_delete_minions_object
can_delete_managers_object?

Мне действительно нравится can_? синтаксис, который может-может использовать. Can-can было бы здорово, если бы это было что-то иное, чем определение функций для выполнения действий. Что я все же мог бы в конечном итоге сделать в дополнение к хранению всех этих логических значений ... потому что есть разрешения уровня учетной записи, которые будут переопределять разрешения уровня группы.

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

[править] - немного пояснил код

Я думаю, вам действительно следует проверить CanCan еще раз, если есть какая-либо группировка разрешений (например, группировка пользователей по менеджерам, миньонам ... с аналогичными разрешениями).и просто сохраните это поле в БД вместо целого хэша способностей)

вот пример того, как класс Ability может выглядеть в вашей ситуации:

class Ability
  include CanCan::Ability

  def initialize(user)

    # All registered users can edit their own objects
    can :manage, [Object], :user_id => user.id

    # Different roles
    if user.moderator?
      can :delete, [Object], :user_id => user.minion.id
    elsif user.admin?
      can :delete, [Object], :user_id => user.manager.id
    end
  end
end
1 голос
/ 29 февраля 2012

Здесь - хороший список драгоценных камней аутентификации Ruby.

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

0 голосов
/ 29 февраля 2012

Это зависит от того, для каких именно разрешений, может быть, что-то вроде CanCan - то, что вам нужно?

https://github.com/ryanb/cancan

Вы могли бы описать несколько разрешений в противном случае?

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