检查php中的用户权限



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

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
}

如果你想在第一次从dataBase获取用户时将其存储在会话中

$_SESSION['user'] = serialize($user);
下一页

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

或者您也可以将用户的id存储在session中,然后从de中获取它

创建一个通用函数并将其放在一个文件中这对于所有文件都是通用的像这样的

 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
 }

在users表中添加如下列:

| canEdit | canDelete | canCreate |
标志为1/0的

。1为真,0为假。

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

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

你可以让它成为一个带参数的函数,所以你会给函数参数,即$canDelete(这是你的$行数据),它只检查权限

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

$canCreate = $row['canCreate'];
if(userPermissions($canCreate)) { ...

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

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

阅读yii如何做:yii RBAC

相关内容

  • 没有找到相关文章

最新更新