2010-07-25 16 views
1

comment puis-je savoir dans Drupal si le rôle de l'utilisateur connecté?Comment puis-je obtenir le rôle d'utilisateur de mon module personnalisé?

Dans la variable utilisateur $ il n'y a pas d'information sur le rôle .. Je dois préciser le code php spécifique en fonction du rôle de l'utilisateur dans mon module personnalisé.

N.B. Dans $ user il y a un champ 'role' mais il contient toujours "user authentifié". Ce que je dois savoir, c'est le rôle spécifique (que j'ai créé à l'avance) d'un utilisateur authentifié, c'est-à-dire 'administrateur du forum', 'utilisateur normal'.

grâce

Répondre

4

Vous n'avez pas réellement besoin de faire votre propre db_query(): user_load() fait déjà. $user->roles est un tableau; juste faire:

if (in_array('role to check', $user->roles)) { 
    // ... 
} 
+0

Dans la variable globale '$ user', la propriété' $ user-> roles' est déjà renseignée. Si vous recherchez les rôles de l'utilisateur actuellement connecté, vous pouvez utiliser cette variable globale. – kiamlaluno

2

Il est préférable de vérifier un accès au lieu de vérifier pour un rôle, puisque les noms de rôle peuvent être modifiés dans l'interface d'administration, brisant ainsi votre code. Vous pourriez dans votre module définir une permission, "a le rôle X".

Si vous voulez vraiment vérifier un rôle des utilisateurs, ce qui est possible. {The users_roles} La table est une table de jointure entre les utilisateurs et les rôles. Vous pouvez donc l'utiliser pour récupérer tous les identifiants de rôle de tous les rôles d'un utilisateur. Vous pouvez rechercher le nom dans la table de rôles. Exemple de code:

global $user; 
$query = db_query("SELECT r.name FROM {role} AS r 
        LEFT JOIN {users_roles} AS U on r.rid = u.rid 
        WHERE u.uid = %d", $user->uid); 
while ($name = db_result($query)) { 
    // check the role names... 
} 
+0

mhm, mais si j'ai besoin d'assigner un code spécifique à un rôle spécifique, comment puis-je y faire référence sans mentionner le nom du rôle? – aneuryzm

+0

Utilisez l'ID de rôle. – Finbarr

+1

@Patrick, comme je l'ai dit, la meilleure option est de créer une autorisation et vérifier que, puisque c'est un code sûr, puisque les noms d'autorisation ne peuvent être modifiés via une interface, id rôle et le nom du rôle peut. – googletorp