joomla原始碼探析續(二十六)JUser物件和使用者許可權判斷

小豪發表於2011-07-03

每一個訪問Joomla網站的使用者都對應這一個JUser物件,通過$user =& JFactory::getUser() 就可以獲得這個物件引用並訪問物件的成員函式和屬性。

下面的程式碼就是顯示使用者的名稱,郵件的一段程式碼:

echo "<p>Your name is {$user->name}, your email is {$user->email}, and your username is {$user->username}</p>";
echo "<p>Your usertype is {$user->usertype} which has a group id of {$user->gid}.</p>";

我們來看看JUser的屬性和成員函式:

id - 使用者唯一編號 
name - 姓名
username - 帳號
email - 郵件
password - 密碼
password_clear - 使用者修改密碼的時候設定真 
usertype - 使用者型別(Super Administrator, Editor) 
gid - 使用者的型別id ,與usertype對應 
block - 是否被阻止,如果阻止就設為1 
registerDate - 註冊日期
lastvisitDate - 最後一次登入日期
guest - 如果使用者未登入就設定為1,其他以上的欄位都設定為空

以上的屬性都可以直接訪問,如果想獲取資料庫中其他的引數,可以通過getParam函式來獲得,下面的程式碼獲取的使用者的語言引數:

$user =& JFactory::getUser();
$language = $user->getParam('language', 'the default');

echo "<p>Your language is set to {$language}.</p>";

通常判斷使用者是否登入都是通過guest來判斷的,當然通過id是否大於0也可以。


使用者訪問許可權

不同的Joomla使用者可能會有不同的許可權,可以通過authorize()成員函式來判斷一個使用者是否具有執行某項任務的權利。authorize()有四個引數,第一個是我們要驗證元件或者函式,第二個是任務,第三,四個分別是記錄型別record types和ownership respectively相對關係,(英文很清晰,中文怎麼這麼難懂)。

libraries/joomla/user/authorization.php檔案中包含了所有的使用者許可權項。我們來看下面的程式碼:

$user =& JFactory::getUser();
if ($user->authorize('com_content', 'edit', 'content', 'all')) {
 echo "<p>You may edit all content.</p>";
} else {
 echo "<p>You may not edit all content.</p>";
}
if ($user->authorize('com_content', 'publish', 'content', 'own')) {
 echo "<p>You may publish your own content.</p>";
} else {
 echo "<p>You may not publish your own content.</p>";
}


上面的第一段程式碼就是判斷使用者是否可以編輯所有的文章,第二段則是判斷是否可以釋出自己的文章。

如果你自己開發了擴充套件,標準的許可權也許並不合適你,那麼你還可以新增自定義的許可權項。以下是新增許可權的程式碼例子:

$auth =& JFactory::getACL();
$auth->addACL('com_userinfo15', 'persuade', 'users', 'super administrator');
$auth->addACL('com_userinfo15', 'persuade', 'users', 'administrator');
$auth->addACL('com_userinfo15', 'persuade', 'users', 'manager');
$user =& JFactory::getUser();
if ($user->authorize('com_userinfo15', 'persuade')) {
 echo "<p>You may persuade the system to do what you wish.</p>";
} else {
 echo "<p>You are not very persuasive.</p>";
}


在我們自己的擴充套件中,進入元件或者外掛的前部,就寫如這樣的程式碼,就可以判斷是否有訪問和執行某項任務的許可權了許可權了。

相關文章