基础理论:
在joomla中,每一个请求,都对应一个用户。当前用户的信息是可读的,在joomla中是通过对象的形式来展示的。我们可以用JFactory对象的成员函数来获得当前用户对象。
$user = JFactory::getUser();
或者,如果你要获得其他注册的用户的信息,你可以传递一个userID的参数,或者用户名都是可以的。
$user = JFactory::getUser(99);//得到ID为99的用户。
$user = JFactory::getUser('johnsmith');//得到用户名为Johnsmith的用户对象。这里存在一个问题,就是用户名有可能相同,不知道joomla是怎样处理的。
通过getUser()函数得到一个用户对象,这样我们可以确保在每一次请求中都只产生一个用户对象。这样可以节约内存和处理器时间。我们可以得到该用户的一些基本信息,通过访问user对像的公共成员变量。下面的代码显示了当前的用户名,email,username,user type group id
echo "<p>Your name is{$user->name},You email is {$user->email},and your username is{$user->username}</p>";
echo "<p>You usertype is {$user->usertype} which has a group id of {$user->id}</p>"
对象成员变量和参数
当调用getUser()函数的时候,系统自动产生相关的成员变量。
id 用户的唯一标识符,当我们应用当前用户记录的时候,应该用这个变量。
name 用户名
username 用户的登录名
email 用户的email地址
password 加密后的用户密码
password_clear:当这个变量改变的时候,就要改变用户的密码。否则,就保存空白。
usertype:用户的类型
gid :用户的组ID,这个和用户类型保持一致。
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属性将会被设置为1.如果用户登录了,那么guest就会被设置为0.
$user = JFactory::getUser();
if($user->guest)
{
echo "<p>You must login to see the content .I want you email address</p>";
}else
{
?>
do something.
}
特权
在joomla中,并不是所有注册的用户的权利都是一样的。超级用户就可以编辑任何的内容,但是一个Publisher仅仅只能够编辑他自己的内容。authorize()函数可以用来判断当前用户是否有权利去执行这个任务。第一个参数用来去区分哪一个组件或者函数我们需要去认证权限。第二个参数就是要执行的任务。第三个和第四个参数是可选的
在joomla1.5中,所有核心组件的权限都是储存在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'),'publishe','content','own'))
{
echo "<p> You may publish your own eontent.</p>";
}
else
{
echo "<p> You may not publish your own content</p>";
}
核心内容组件的权限也可不能够完全满足你的要求,那么在这种情况下,你可以创建自己的权限。你也许想添加一些代码,并且这些代码每次都必须得执行。比喻说在组件的开始部位或者做一个系统插件。首先,你需要得到一个用于认证的对象。这个用getACL()函数就可以搞定了。getACL()函数有点类似于getUser(),在整个请求过程中也只有一个认证对象。一旦你得到了这个对象。调用addACL()成员函数去添加一些权限。传递你组件的名称或者函数,任务的名称。用户和用户类型。
注意:子啊joomla1.5中权限是不允许自动继承的。如果你给管理员编辑权限。那么超级用户不会自动获得编辑权限的,你需要授权。
$auth = JFactory::getACL();
$auth->addACL('com_userinfo15','persuade','users','super administrator');
$user = JFactory::getUser();
if($user ->authorize('com_userinfo15','persuade'))
{
do something
}
else
{
do something
}