【问题标题】:Check user permission in php在php中检查用户权限
【发布时间】:2013-05-05 12:58:35
【问题描述】:

如何创建一个 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 语句,我想要更简洁的代码:)

【问题讨论】:

    标签: php class function admin-rights


    【解决方案1】:
    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 中取回 每个页面上的数据库。

    【讨论】:

      【解决方案2】:

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

       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
       }
      

      【讨论】:

        【解决方案3】:

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

        | 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)) { ...
        

        【讨论】:

        • 谢谢...但是用户权限太多,无法将它们放在行中...而且我需要限制查询 :) 另一个答案是最好的方法
        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-02
          • 2018-02-14
          • 2021-10-23
          • 2014-05-23
          相关资源
          最近更新 更多