Drupal 7 – Jak programově upravit uživatelské role?

Dnes jsem pro jeden projekt dokončil modul, pomocí kterého může uživatel požádat o ověření svého účtu. Funguje podobně, jak to má zařízeno například Aukro.cz. Jakmile uživatel o toto ověření požádá, je mu zaslán na uvedenou adresu dopis s ověřovacím kódem, který následně vyplní v administraci. Jak jsem to řešil?

Nejprve jsem potřeboval vybraná políčka uživateli znepřístupnit, jakmile požádá o ověření (nedávalo by smysl, aby si mohl měnit adresu, když požádá o ověření adresy). Vymýšlel jsem různá vlastní řešení, ale nakonec jsem skončil u modulu Field Permissions , který dokáže znepřístupnit políčka pro jednotlivé role. Vytvořil jsem si tedy potřebné role (neověřený, požádal o ověření, ověřený), které následně programově přiděluji dle toho, jak uživatel postupně prochází jednotlivé kroky. Níže je ukázka možností modulu Field Permissions, která je k dispozici u každého políčka. Jednotlivé úkony lze následně přiřazovat na stránce Oprávnění.

Modul je psaný čistě na míru, takže zveřejním akorát některé zajímavé části kódu. Věděli jste jak programově přidávat/ubírat role uživateli?

global $user; //operace provádíme nad aktivním uživatelem

$roles_list = $user->roles; //načteme si role do pole
unset($roles_list[7]); odstraníme roli dle ID. Pokud známe jen jméno, použijeme cyklus foreach
$roles_list[8] = 'pre-verified'; //přidáme roli
$fields['roles'] = $roles_list; //přidáme do pole úprav
user_save($user, $fields); //uložíme

Pokud se nepletu, v Drupal 6 to funguje shodně.



Komentáře

Zatím nikdo nepřidal komentář, můžete být první.



O autorovi

Pari

Vítejte na mém blogu, rád bych se v krátkosti představil. Je mi 26 let. Momentálně nejvíce času věnuji projektu Lepime.cz - obchod se samolepkami na zeď a tvorbě webů postavených na redakčním systému Drupal pod značkou MEPA.CZ.