Почему Pundit не сочетается с Rolify, как CanCanCan?

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


person MicFin    schedule 03.10.2014    source источник
comment
Pundit отлично работает с Rolify или любой другой ролевой системой.   -  person sevenseacat    schedule 06.10.2014
comment
@sevenseacat это тоже правильный ответ   -  person MicFin    schedule 06.10.2014


Ответы (2)


Почему бы не использовать их вместе? Их можно легко использовать таким образом

class OrganisationPolicy
  def initialize(user, organisation)
    @user = user
    @organisation = organisation
  end

  def index?
    @user.has_role? :admin
  end

  def show?
    @user.has_role?(:admin) || @user.organisation == @organisation
  end
end

На самом деле то, что rolify и pundit не связаны, — это хорошо, а не ошибка дизайна ;)

person geekazoid    schedule 04.02.2015

Недавно я использовал драгоценный камень Pundit с Rails 4, используя devise. Pundit — это автономная система, не зависящая от Rolify, согласно моему опыту.

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

Пожалуйста, взгляните на схему, которую я создал для своего проекта:

 create_table "users", force: true do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    **t.boolean  "is_admin"
    t.boolean  "is_daily_user"

Где поля is_admin и is_daily_user добавляются для ролей пользователей.

Надеюсь это поможет!

person Ekta Verma    schedule 05.10.2014
comment
Это будет работать, но не масштабируется. Представьте, что вы хотите добавить пользователя is_premium. Вам придется изменить модель вашей БД. Вместо этого создайте свою собственную модель UserRole(:id, :role_name), которая принадлежит пользователю, где вы можете создать столько имен ролей, сколько захотите для каждого пользователя... Однако я выбрал Rolify gem;) - person luigi7up; 21.10.2016