joomla源代码探析续(二十六)JUser对象和用户权限判断
每一个访问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>";
}
在我们自己的扩展中,进入组件或者插件的前部,就写如这样的代码,就可以判断是否有访问和执行某项任务的权限了权限了。