1

如何创建一个 PHP 函数或类来检查半管理员用户(从 MySQL 数据库设置)是否具有某些权限,例如创建新页面、编辑或删除?我需要一个检查用户权限的函数,然后显示如下代码:

  if ($he_can_create_page){
  //continue the script.....
  }else{
  //don`t continue
   }

目前我使用这样的会话:

    If($_SESSION['user_type']=='Admin'||$_SESSION['user_type']=='premium'){
 //do stuff
 }else if()......... {
  // ..............
   }

但是它们变得太多 if 语句,我想要一个更清晰的代码:)

4

4 回答 4

3
interface User {

    public function canCreatePage();
    public function canDeletePage();
    public function canEditPage();
    ....
}

class Admin implements User {

    public function canCreatePage(){
        return true;
    }

    public function canEditPage(){
        return true;
    }
    ...
}

class Editor implements User {

     public function canCreatePage() {
          return false;
     }

     public function canEditPage(){
        return true;
     }

     ...

}

然后从你在数据库中得到的

if ($row['user_type'] == 'Admin') {
   $user = new Admin();
} else if $row['user_type'] == 'Editor') {
   $user = new Editor();
}  ....

在您的所有页面中:

if ($user->canCreatePage()){
  //continue the script.....
}else{
  //don`t continue
}

如果您想在第一次从数据库中获取用户时将其存储在会话中

$_SESSION['user'] = serialize($user);

在下一页

$user = unserialize($_SESSION['user']);

或者您也可以将用户的 id 存储在 session 中,然后在每个页面上从 de DB 中取回。

于 2013-05-05T13:26:01.257 回答
0

在您的用户表中添加列,例如:

| canEdit | canDelete | canCreate |

带有标志 1/0。1 为真,0 为假。

选择字段并进行检查,即:

if($row['canEdit'] = 1) {
//continue (return true)
}
else {
//stop (return false)
}

您可以使用参数将其设为函数,因此您会将参数赋予函数,即 $canDelete (这是您的 $row 数据)并且它只检查该权限

function userPermissions($type)
 if($type=1) {
   return true;
 }
 else {
   return false;
 }


$canCreate = $row['canCreate'];

if(userPermissions($canCreate)) { ...
于 2013-05-05T13:14:26.570 回答
0

创建一个通用函数,并将其放入所有文件通用的文件中,如下所示

 function pageCreatePermission() {
     if($_SESSION['user_type']=='Admin'||$_SESSION['user_type']=='premium'){

          return true;

     } else { 
          return false;
}

然后在你的文件中使用类似这样的函数

if (pageCreatePermission()) {
     //do your stuff
 } else {
     //show error you want
 }
于 2013-05-05T13:14:57.880 回答
0

答案是使用访问控制系统。有许多不同的类型。最常用的(在 Web 开发中)是 ACL(访问控制列表)和 RBAC(基于角色的访问控制)。规则可以从数据库中填充或硬编码。

为了让您了解它们是如何工作的,请查看 Zend 框架中的示例:ACLRBAC。在 Zend Framework 中,ACL 与 RBAC 没有太大区别,因为它也有角色。但通常 ACL 是基于用户而不是基于角色的。如果您愿意,可以将 Zend 或其他框架的 ACL/RBAC 集成到您自己的项目中。

了解 yii 是如何做到的:yii RBAC

于 2013-05-05T13:23:06.570 回答