2014-10-03 4 views
8

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

+6

Пандит будет прекрасно работать с Rolify , или любой другой системы ролей. – sevenseacat

+1

@sevenseacat это также правильный ответ – MicFin

ответ

35

Почему бы не использовать их вместе? Они могут быть легко использованы в моде, как этот

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 не связаны кое-что хорошо, а не провал дизайн;)

1

Недавно я использовал драгоценный камень 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 поле добавляется для ролей пользователей.

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

+2

Это будет работать, но оно не масштабируется. Представьте, что вы хотели добавить пользователя is_premium. Вам придется изменить свою модель БД. Создайте вместо этого свою собственную модель UserRole (: id,: role_name), которая принадлежит пользователю, где вы можете создать столько имен ролей, сколько хотите для каждого пользователя ... Я пошел с Rolify gem, хотя;) – luigi7up