2010-07-25 85 views
1

如何在Drupal中知道登錄用戶的角色?如何從我的自定義模塊獲取用戶角色?

在$ user變量中沒有角色信息..我需要根據用戶角色指定特定的PHP代碼,這取決於我的自定義模塊中的用戶角色。

N.B.在$ user中有一個字段'角色',但它總是包含「經過身份驗證的用戶」。我需要知道的是已認證用戶的特定角色(我已提前創建),即'論壇管理員','普通用戶'。

感謝

回答

4

你其實並不需要做自己的db_query()user_load()已經這樣做了。 $user->roles是一個數組;只是這樣做:

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

在全局變量'$ user'中,屬性'$ user-> roles'已經被填充。如果您正在查找當前登錄用戶的角色,則可以使用該全局變量。 – kiamlaluno 2010-07-25 13:46:12

2

這是更好地檢查的訪問,而不是檢查一個角色,因爲角色名可以在管理界面改變,從而打破你的代碼。你可以在你的模塊中定義一個權限,「有角色X」。

如果你真的想檢查一個用戶角色,這是可能的。 {The users_roles}表是用戶和角色之間的連接表。因此,您可以使用它來獲取用戶擁有的所有角色的所有刪除(角色id)。您可以在角色表中查找名稱。示例代碼:

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,但如果我需要爲特定角色分配一個特定的代碼,我怎麼能提到它而不提及角色名? – aneuryzm 2010-07-25 10:37:26

+0

使用角色ID。 – Finbarr 2010-07-25 10:39:23

+1

@Patrick,正如我所說的,最好的選擇是創建一個權限並檢查它,因爲這是代碼安全的,因爲權限名稱不能通過接口,角色ID和角色名稱進行更改。 – googletorp 2010-07-25 11:01:50

相關問題