2014-10-03 18 views
8

Sto usando Devise e sono interessato all'utilizzo di Pundit ma non riesco a trovarlo molto se si deve integrare con Rolify o se è indipendente. CanCanCan funziona bene con Rolify e mi piace il modello dei ruoli. Mi manca un motivo importante per cui Pundit e Rolify non sembrano essere usati insieme molto?Perché Pundit non è accoppiato con Rolify come CanCanCan?

+6

Pundit funzionerà bene con Rolify o qualsiasi altro sistema di ruolo. – sevenseacat

+1

@sevenseacat anche questa è una risposta corretta – MicFin

risposta

35

Perché non li usano insieme? Essi possono essere utilizzati facilmente in un modo come questo

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 

In realtà, la cosa che rolify e pundit non sono accoppiati è qualcosa di bello, e non un fallimento di progettazione;)

1

Recentemente ho usato Pundit gem con Rails 4 usando devise.Pundit è un sistema autonomo senza dipendenze da Rolify come da esperienza.

Invece di utilizzare Rolify, ho creato la migrazione per aggiungere ruoli nella tabella utente di creazione esistente che consente di assegnare ruoli agli utenti e verificare quali ruoli hanno.

prega di dare un'occhiata al schema che ho creato per il mio progetto:

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" 

Dove si aggiunge is_admin e is_daily_user campo per ruoli utente.

Spero che questo aiuti!

+2

Funzionerà, ma non è scalabile. Immagina di voler aggiungere un utente is_premium. Dovresti cambiare il tuo modello di DB. Crea invece il tuo modello UserRole (: id,: role_name) che appartiene_per utente dove puoi creare tutti i nomi di ruolo che vuoi per utente ... Sono andato con Rolify gem, però;) – luigi7up

Problemi correlati