Я использую Devise и заинтересован в использовании Pundit, но не могу найти много информации о том, должен ли он интегрироваться с Rolify или он должен быть автономным. CanCanCan прекрасно работает с Rolify, и мне нравится модель ролей. Я упускаю основную причину, по которой Pundit и Rolify, похоже, не часто используются вместе?
Почему Pundit не сочетается с Rolify, как CanCanCan?
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
Это будет работать, но не масштабируется. Представьте, что вы хотите добавить пользователя is_premium. Вам придется изменить модель вашей БД. Вместо этого создайте свою собственную модель UserRole(:id, :role_name), которая принадлежит пользователю, где вы можете создать столько имен ролей, сколько захотите для каждого пользователя... Однако я выбрал Rolify gem;)
- person luigi7up; 21.10.2016