检查会话用户是管理员还是简单用户

时间:2014-05-26 03:20:51

标签: php html css cakephp

我想为按钮制作if子句。如果管理员已登录,则不会显示。

if($this->Session->User['role'] == 'admin') {
    echo
    '<li> <a href="/VAG/dashboard"><ul class="pull-right">Admin skiltis</ul></a></li>';
}

我无法从会话中获得该角色,如果是管理员则不进行比较..

3 个答案:

答案 0 :(得分:1)

直接使用$_SESSION['Auth']['User']是一种不好的做法,因为取决于AuthComponent的配置方式,它可能无法使用。

您最好将经过身份验证的用户从控制器传递到视图,然后只检查他的属性:

AppController的:

$authenticated_user = $this->Auth->user();

if(isset($authenticated_user))
{
    $this->set(compact('authenticated_user'));
}

查看:

if(isset($authenticated_user) && $authenticated_user['role'] == 'admin'){
    ...
}

顺便说一下,您还应该使用视图中的HtmlHelper来生成链接,而不是使用硬编码的网址手动打印<a>标记,以便从许多Cake功能中受益。

答案 1 :(得分:0)

尝试对代码进行一些调试。

首先检查您的会话是否已启动。 您可以通过执行命令“session_status()”来执行此操作,如果结果为“PHP_SESSION_NONE”,则会话未启动。您可以通过在页面进行任何打印之前添加“session_start()”来修复它。

答案 2 :(得分:-2)

如果print_r($_SESSION);的值类似,

Array ( [Config] => Array ( [userAgent] => 4df452d8263aa05ef9324f37499322b0 [time] => 1401090120 [countdown] => 10 ) [Message] => Array ( ) [Auth] => Array ( [User] => Array ( [id] => 8 [username] => aaaaa [email] => aaa@gmail.com [role] => admin [created] => 2014-05-26 02:43:20 [modified] => 2014-05-26 02:43:20 [status] => 1 ) ) )

尝试使用此代码,我认为它会起作用,

if($_SESSION['Auth']['User']['role'] == 'admin') {
echo
'<li> <a href="/VAG/dashboard"><ul class="pull-right">Admin skiltis</ul></a></li>';
}