%10 %602 %2013 %21:%七 %PM

访问当前的USER对象

作者
给本项目评分
(0 得票数)

本文将会介绍一些操作joomla用户的方法。

基础理论:

   在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

}

 

 

阅读 3631 次数 最后修改于 %18 %237 %2014 %12:%七 %PM