Biblioteca de roluri foarte simpla, fara nicio autorizare care sa sustina domeniul de aplicare al obiectului resursa.

Sa vedem un exemplu:

user.has_role? (: moderator, Forum.first) => false # daca utilizatorul este moderatorul unui alt forum

Aceasta biblioteca poate fi usor integrata cu orice bijuterie de autentificare (concepe, Authlogic, Clearance) si bijuterie de autorizare * (CanCanCan, autoritate)

* : bijuterie de autorizare care nu ofera o clasa de roluri

Cerinte

  • Sine> = 3.2
  • ActiveRecord> = 3.2 sau Mongoid> = 3.1
  • accepta ruby ​​2.0 / 1.9.3, JRuby 1.6.0+ (in modul 1.9) si Rubinius 2.0.0dev (in modul 1.9)
  • suportul pentru ruby ​​1.8 a fost renuntat din cauza Mongoid> = 3.0 care accepta doar 1.9 sintaxa hash noua

Instalare

Adaugati acest lucru la Gemfile si executati comanda bundle.

Notiuni de baza

1. Generati un model de rol

Mai intai, creati modelul de rol si fisierul de migrare folosind acest generator:

NB pentru versiunile Rolify anterioare versiunii 3.3, utilizati:

rails g rolify: rol Rol utilizator

Rolurile si clasele de utilizator sunt implicite. Puteti specifica orice nume de clasa de rol doriti. Acesta este un fisier complet nou, astfel incat orice nume va face treaba. Pentru numele clasei User, probabil ca il veti folosi pe cel furnizat de solutia dvs. de autentificare. rolify adauga doar cateva metode de clasa intr-o clasa de utilizator existenta.

Daca doriti sa utilizati Mongoid in loc de ActiveRecord, trebuie doar sa adaugati argument –orm = mongoid si sariti la pasul # 3

2. Rulati migrarea (necesara numai cand utilizati ActiveRecord)

Sa migram!

3.1 Configurati-va modelul de utilizator

Aceasta bijuterie adauga metoda rolify la clasa dvs. de utilizator. De asemenea, puteti specifica apeluri optionale in clasa User pentru momentul in care sunt adaugate sau eliminate roluri:

clasa Utilizator <ActiveRecord :: Base rolify: before_add =>: before_add_method def before_add_method (rol) # face ceva inainte de a fi adaugat end end

Metoda rolify accepta urmatoarele optiuni de apel invers:

  • before_add
  • after_add
  • inainte_de-scoate
  • after_remove

Rambursarile Mongoid sunt, de asemenea, acceptate si functioneaza in acelasi mod.

Metoda rolify accepta, de asemenea, optiunea invers_of daca trebuie sa dezambiguati relatia.

3.2 Configurati modelele de resurse

In modelele de resurse pe care doriti sa aplicati roluri, trebuie doar sa adaugati metoda resourcify De exemplu, pe aceasta clasa ActiveRecord:

clasa Forum <ActiveRecord :: Base resourcify end

3.3 Atribuiti rolul implicit

clasa Utilizator <ActiveRecord :: Base after_create: assign_default_role def assign_default_role self.add_role (: newuser) if self.roles.blank? sfarsit sfarsit

4. Adaugati un rol unui utilizator

Pentru a defini un rol global:

user = User.find (1) user.add_role: admin

Pentru a defini un rol acoperit de o instanta de resursa:

user = User.find (2) user.add_role: moderator, Forum.first

Pentru a defini un rol cuprins intr-o clasa de resurse:

user = User.find (3) user.add_role: moderator, Forum

Eliminati rolul:

user = User.find (3) user.remove_role: moderator

Asta este!

5. Interogari de rol

Pentru a verifica daca un utilizator are un rol global:

user = User.find (1) user.add_role: admin # seteaza un rol global user.has_role? : admin => adevarat

Pentru a verifica daca un utilizator are un rol pe o instanta de resursa:

user = User.

porno retro maduras porno casadas españolas
www.maduras.con anal interacial
videos ponos anal maduras españolas
corriendose dentro vieja gorda follando
porno abuelas españolas compilacion mamadas
le pilla pajeandose pilladas de torbes
culos gordos hombres pajeandose
porno fuerte borracha anal
cfnmwave.com cfnmwave.com
porno gay marruecos jovencitas folladoras
porno transexual en español videos porno gay de españoles
follada real follando con las vecinas
masajes porno en español carne de mercado xxx
xxx orgias tetas bailando
intercambio parejas amateur follando en el parque
pelisxxx insesto
paja a desconocido gallega porno
maduros en pajilleros videos madres lesbianas
maduras haciendo pajas metiendo mano en el bus
follando con la abuela jovencitas españolas follando por dinero

find (2) user.add_role: moderator, Forum.first # seteaza un rol pe o instanta de resursa user.has_role? : moderator, Forum.first => user.has_role adevarat? : moderator, Forum.last => false

Pentru a verifica daca un utilizator are un rol cuprins intr-o clasa de resurse:

utilizator = Utilizator.find (3) user.add_role: moderator, Forum # seteaza un rol cuprins intr-o clasa de resurse user.has_role? : moderator, Forum => true user.has_role? : moderator, Forum.first => user.has_role adevarat? : moderator, Forum.last => adevarat

Un rol global anuleaza cererea de rol de resursa:

user = User.find (4) user.add_role: moderator # seteaza un rol global user.has_role? : moderator, Forum.first => user.has_role adevarat? : moderator, Forum.last => adevarat

6. Interogarea rolurilor resurselor

Incepand de la rolify 3.0, puteti cauta roluri la nivel de instanta sau resurse la nivel de clasa.

Nivelul instantei

forum = Forum.first forum.roles # => [lista rolurilor care sunt legate doar de instanta forum] forum.applied_roles # => [lista rolurilor legate de instanta forum si de clasa Forum]

Nivelul clasei

Forum.with_role (: admin) # => [lista instantelor Forum care au rolul “admin” legat de ele] Forum.without_role (: admin) # => [lista instantelor Forum care NU au rolul “admin” legat de them] Forum.with_role (: admin, current_user) # => [lista instantelor Forum care au rolul „admin” legat de ele si apartin rolurilor current_user] Forum.with_roles ([: admin,: user], current_user) # = > [lista instantelor Forum care au rolul „admin” sau „utilizator” legat de ele si apartin rolurilor current_user] User.with_any_role (: user,: admin) # => [lista instantelor utilizatorului care au rolul „admin” sau „utilizator” legat de acestea] User.with_role (: site_admin, current_site) # => [lista de instante ale utilizatorilor care au rolul de „site_admin” la o instanta a site-ului] User.with_role (:site_admin,: any) # => [lista instantelor utilizatorului care au rolul „site_admin” pentru orice instanta a site-ului] User.with_all_roles (: site_admin,: admin) # => [lista instantelor utilizatorului care au rol “site_admin” si un rol de “administrator” legat de acesta] Forum.find_roles # => [lista rolurilor care sunt legate de orice instanta de forum sau de clasa Forum] Forum.find_roles (: admin) # => [lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum, cu „admin” ca nume de rol] Forum.find_roles (: admin, current_user) # => [lista de roluri care sunt legate de orice instanta de forum sau de Clasa forumului cu „admin” ca nume de rol si apartine utilizatorului_curent]pentru orice instanta a site-ului] User.with_all_roles (: site_admin,: admin) # => [lista instantelor utilizatorului care au rolul „site_admin” si un rol de „administrator” legat de acesta] Forum.find_roles # => [list de roluri care sunt legate de orice instanta de forum sau de clasa Forum] Forum.find_roles (: admin) # => [lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum, cu „admin” ca nume de rol ] Forum.find_roles (: admin, current_user) # => [lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum cu „admin” ca nume de rol si apartine utilizatorului_curent]pentru orice instanta a site-ului] User.with_all_roles (: site_admin,: admin) # => [lista instantelor utilizatorului care au rolul „site_admin” si un rol de „administrator” legat de acesta] Forum.find_roles # => [lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum] Forum.find_roles (: admin) # => [lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum, cu „admin” ca nume de rol ] Forum.find_roles (: admin, current_user) # => [lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum cu „admin” ca nume de rol si apartine utilizatorului_curent][lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum] Forum.find_roles (: admin) # => [lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum, cu „admin” ca nume rol] Forum.find_roles (: admin, current_user) # => [lista de roluri care sunt legate de orice instanta Forum sau de clasa Forum cu „admin” ca nume de rol si apartine utilizatorului_curent][lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum] Forum.find_roles (: admin) # => [lista de roluri care sunt legate de orice instanta de forum sau de clasa Forum, cu „admin” ca nume rol] Forum.find_roles (: admin, current_user) # => [lista de roluri care sunt legate de orice instanta Forum sau de clasa Forum cu „admin” ca nume de rol si apartine utilizatorului_curent]

Mod strict

clasa User <ActiveRecord :: Base rolify strict: true end @user = User.first @ user.add_role (: forum, Forum) @ user.add_role (: forum, Forum.first) @ user.has_role? (: forum, Forum ) # => true @ user.has_role? (: forum, Forum.first) # => true @ user.has_role? (: forum, Forum.last) # => false

Adica devii adevarat doar pe un rol pe care il adaugi manual.

Roluri in cache (pentru a evita problema N + 1)

@ user.add_role: admin, Forum @ user.add_role: membru, Forum users = User.with_role (: admin, Forum) .preload (: role) users.each do | user | user.has_cached_role? (: membru, Forum) # nu se termina interogari suplimentare

Aceasta metoda trebuie utilizata cu precautie. Daca nu preincarcati rolurile, has_cached_role? s-ar putea reveni fals. In exemplul de mai sus, s-ar returna false pentru @ user.has_cached_role? (: Membru, Forum), deoarece User.with_role (: admin, Forum) va incarca doar rolurile: admin.

Resurse

  • Wiki
  • Utilizare: toate comenzile disponibile
  • Tutoriale:
    • Cum se foloseste rolify cu Devise si CanCanCan
    • Folosind rolify cu Devise and Authority
    • Tutorial pas cu pas oferit de RailsApps

Faceti upgrade de la versiunile anterioare

Va rugam sa cititi instructiunile de actualizare.

Probleme cunoscute

  • Daca utilizati bijuterie Mongoid si / sau mai putin cu sine, va rugam sa cititi acest lucru
  • Biblioteca moped (driverul ruby ​​pentru Mongodb folosit de Mongoid) nu accepta inca rubinius 2.2 (vezi https://github.com/mongoid/moped/issues/231)
  • Daca utilizati Rails 4 si Mongoid, utilizati Mongoid ~> 4. rolify este testat complet cu Rails 4 si Mongoid 4.

Intrebari sau probleme?

Daca aveti o problema sau o cerere de caracteristica cu / pentru rolify, va rugam sa creati o noua problema pe GitHub specificand timpul de rulare ruby, sinele si versiunile rolify pe care le utilizati si pietrele prezente in fisierul dvs. Gem , sau fortati proiectul si trimiteti o cerere de extragere .

Pentru ca specificatiile sa ruleze, trebuie sa apelati pachetul si apoi sa greblati. Consultati specificatia / README pentru mai multe informatii.