如何在Drupal中知道登錄用戶的角色?如何從我的自定義模塊獲取用戶角色?
在$ user變量中沒有角色信息..我需要根據用戶角色指定特定的PHP代碼,這取決於我的自定義模塊中的用戶角色。
N.B.在$ user中有一個字段'角色',但它總是包含「經過身份驗證的用戶」。我需要知道的是已認證用戶的特定角色(我已提前創建),即'論壇管理員','普通用戶'。
感謝
如何在Drupal中知道登錄用戶的角色?如何從我的自定義模塊獲取用戶角色?
在$ user變量中沒有角色信息..我需要根據用戶角色指定特定的PHP代碼,這取決於我的自定義模塊中的用戶角色。
N.B.在$ user中有一個字段'角色',但它總是包含「經過身份驗證的用戶」。我需要知道的是已認證用戶的特定角色(我已提前創建),即'論壇管理員','普通用戶'。
感謝
你其實並不需要做自己的db_query()
:user_load()
已經這樣做了。 $user->roles
是一個數組;只是這樣做:
if (in_array('role to check', $user->roles)) {
// ...
}
這是更好地檢查的訪問,而不是檢查一個角色,因爲角色名可以在管理界面改變,從而打破你的代碼。你可以在你的模塊中定義一個權限,「有角色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...
}
mhm,但如果我需要爲特定角色分配一個特定的代碼,我怎麼能提到它而不提及角色名? – aneuryzm 2010-07-25 10:37:26
使用角色ID。 – Finbarr 2010-07-25 10:39:23
@Patrick,正如我所說的,最好的選擇是創建一個權限並檢查它,因爲這是代碼安全的,因爲權限名稱不能通過接口,角色ID和角色名稱進行更改。 – googletorp 2010-07-25 11:01:50
在全局變量'$ user'中,屬性'$ user-> roles'已經被填充。如果您正在查找當前登錄用戶的角色,則可以使用該全局變量。 – kiamlaluno 2010-07-25 13:46:12