在我的网站上,我设置了用户组,根据用户的权限显示不同的内容。
这里的例子是我的表:
我得到的问题是一堆通知说明:
它说来自第105行的class \ User.php
这是:
public function hasPermission($key) {
//$group = $this->_db->query("SELECT * FROM groups WHERE id = ?", array($this->data()->group_id));
$group = $this->_db->get('groups', array('id', '=', $this->data()->group_id));
if($group->count()) {
$permissions = json_decode($group->first()->permissions, true);
if($permissions[$key] == true) {
return true;
}
}
return false;
}
第105行是:if($permissions[$key] == true) {
例如,当我打电话给根据用户权限显示不同的导航时,我这样做:
<?php
$user = new User;
if($user->hasPermission('owner')) {
include_once($_SERVER['DOCUMENT_ROOT']."/inc/navs/owner-nav.php");
}
elseif($user->hasPermission('renter')) {
include_once($_SERVER['DOCUMENT_ROOT']."/inc/navs/renters-nav.php");
}
elseif($user->hasPermission('admin')) {
include_once($_SERVER['DOCUMENT_ROOT']."/inc/navs/admin-nav.php");
}
elseif($user->hasPermission('new')) {
include_once($_SERVER['DOCUMENT_ROOT']."/inc/navs/newuser-nav.php");
}
elseif (!$user->hasPermission('nonuser')){
include_once($_SERVER['DOCUMENT_ROOT']."/inc/navs/newuser-nav.php");
}
我收到除了所有者之外的每个权限的通知消息,因为它位于列表顶部。如果我将管理员放在列表顶部,那么当我处于管理员模式时,我就不会收到任何通知。等等。
我不明白为什么会这样,并且想知道是否有人可能有解决方案。
我意识到它们只是通知,并且在我实时运行时不会影响网站,但它仍然会在我的目录中抛出一个错误文件,只是让我烦恼。
无论如何,如果有人有想法或建议,我很乐意听到。
答案 0 :(得分:2)
您需要使用 isset 来确保密钥确实存在,
if(isset($permissions[$key]) && $permissions[$key] == true) {
return true;
}
答案 1 :(得分:1)
将第105行更改为
if(isset($permissions[$key]) && $permissions[$key] == true)