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