您在這裡

user_access

ddtet's 的頭像
ddtet 在 2007-05-10 (四) 17:22 發表

定義

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;
}
?>

Drupal版本: