定義
user_access($string, $account = NULL)
modules/user/user.module, 第 351 行開始
描述
判斷使用者是否具有某種權限。
所有的權限判斷,都應該要例用這個函數。一來是讓所有的程式有一致性,而且可以保證SuperUser能擁有所有的權限。
參數
$string: 要判定的權限名字,如"administer nodes"
$account (預設): 一個 User 物件。在要判斷的使用者並不是「目前登入的那個人」時使用。
傳回值
如果判定是「有這個權限」,則傳回布林值 TRUE。
範例
檢查目前使用者是否有「存取管理頁面(administer comments)」的權限
$has_permission = user_access("administer comments"); // 第二個參數省略
原始碼
<?php
function user_access($string, $account = NULL) {
global $user;
static $perm = array();
if (is_null($account)) {
$account = $user;
}
// 超級使用者 SuperUser 擁有所有的權限
if ($account->uid == 1) {
return TRUE;
}
// 為了滅少到資料庫作查詢連線數,會把作查過的資料放入靜態變數中
if (!isset($perm[$account->uid])) {
$result = db_query("SELECT DISTINCT(p.perm) FROM {role} r INNER JOIN {permission} p ON p.rid = r.rid WHERE r.rid IN (%s)", implode(',', array_keys($account->roles)));
$perm[$account->uid] = '';
while ($row = db_fetch_object($result)) {
$perm[$account->uid] .= "$row->perm, ";
}
}
if (isset($perm[$account->uid])) {
return strpos($perm[$account->uid], "$string, ") !== FALSE;
}
return FALSE;
}
?>