使用 PHP 管理用户权限的最佳方式


Best way to manage user permissions with PHP

使用PHP管理用户权限的最佳方法是什么。

1) 通过使用新表

table user_permissions (id, userId, addNews, editNews, deleteNews, ...)每个属性列的类型都是布尔值(1 => 是,0=>否)

2) 通过使用逻辑门

$addNews = 1; 
$editNews = 2;  
$deleteNews = 4;
 ...
$permissions = $addNews | $editNews | $deleteNews | ...;
//Save permission in user table
//and save it in session on login to test permission in every page
$permissions = $_SESSION['permissions'];
if($permissions & 1) // true -> user has permission to add news

或者你有另一种方式?

没有最好的方法。每个解决方案都取决于您希望如何使用它。

例如,至少需要回答以下问题:

  • 您有多少权限?
  • 它们是否分层(来宾 -> 用户 ->管理员 ->超级管理员)?(例如,一个用户可以撰写新闻,但不能删除新闻。

不过,在代码中有一个点可以检查权限会更容易。

function havePermission($name){
// logic
}

从不!在代码中执行任何内联权限检查。这是坏兔子。

此外,实际上有三种存储权限的方法:

  1. 新表(或您的主用户表),如您提供:

    userId, accessNews, accessPages, etc

  2. 但是,具有不同结构的新表: userId, permissionId
  3. 主用户表,一个字段: userId, groupIduserId, access

    在此解决方案中,在访问中,您可以编写可以使用布尔逻辑进行检查的访问矩阵。