Ich benutze Devise und bin daran interessiert, Pandit zu verwenden, kann aber nicht viel darüber herausfinden, ob es mit Rolify integriert werden soll oder ob es eigenständig ist. CanCanCan funktioniert gut mit Rolify und ich mag das Rollenmodell. Fehle mir ein Hauptgrund, warum Pundit und Rolify nicht oft zusammen benutzt werden?Warum ist Pundit nicht wie CanCanCan mit Rolify gekoppelt?
Antwort
Warum verwenden Sie sie nicht zusammen? Sie lassen sich leicht in einer Art und Weise, wie dieser
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 der Tat verwendet werden, die Sache, dass rolify
und pundit
nicht gekoppelt sind, ist schön, etwas, und kein Konstruktionsfehler;)
Ich habe vor kurzem verwendet Pundit gem mit Rails 4 mit devise.Pundit ist ein eigenständiges System mit keiner Abhängigkeit von Rolify nach meiner Erfahrung.
Anstatt Rolify zu verwenden, habe ich eine Migration erstellt, um Rollen in die vorhandene Benutzertabelle für devise einzufügen, mit der Sie Benutzern Rollen zuweisen und prüfen können, welche Rollen sie haben.
Bitte werfen Sie einen Blick auf das Schema, das ich für mein Projekt erstellt:
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"
Wo is_admin
und is_daily_user
Feld für Benutzerrollen hinzugefügt wird.
Hoffe, das hilft!
Das wird funktionieren, aber es ist nicht skalierbar. Stellen Sie sich vor, Sie wollten einen is_premium-Benutzer hinzufügen. Sie müssten Ihr DB-Modell ändern. Erstelle stattdessen dein eigenes Model UserRole (: id,: role_name), das zu user gehört, wo du pro User beliebig viele Rollennamen erstellen kannst ... Ich bin allerdings mit Rolify gem gegangen;) – luigi7up
Pundit wird gut funktionieren mit Rolify oder irgendein anderes Rollensystem. – sevenseacat
@sevenseacat dies ist auch eine richtige Antwort – MicFin