将权限存储到多维数组php中

rts*_*ker 5 php oop class extraction

好吧,我只是想更好地在PHP中制作更松散耦合的类等,以提高我的技能.我的计算机上有一个本地测试数据库,对于用户表,我有一个名为"role"的列.我正在尝试构建一个函数,它是获取用户权限的一般函数,因此它不依赖于他们尝试执行的特定任务.

当用户尝试执行诸如创建新论坛主题等操作时,我想查询数据库,如果"role"是某个值,则将权限存储在多维数组中,如下所示:

$permissions = array(
    'forums' => array("create", "delete", "edit", "lock"),
    'users' => array("edit", "lock")
);
Run Code Online (Sandbox Code Playgroud)

然后,我希望能够在用户通过检查isset($ var)发布表单后在每个PHP文件的顶部键入以下内容来搜索该数组以获取特定权限.因此,如果用户正在尝试编辑用户,我希望能够通过类方法执行以下操作(如果可能)

if (Class::get_permissions($userID),array($permissionType=>$permission))) {
   // do query
} else {
   // return error message
}
Run Code Online (Sandbox Code Playgroud)

如何有一个松散耦合的权限检查功能,这将是一个很好的方法,可以做这样的事情?它不必像这样完全布局,而是松散耦合,因此可以重复使用而不必受某项任务的约束.但是我希望能够拥有一系列权限而不仅仅是"admin","user"等可重用性,因此它不会限制我的选择.因为我现在在php脚本文件的顶部有一堆类似的代码.

if (Class::get_permissions($userID) == "admin") {
   // allow query
} else {
   // return error
}
Run Code Online (Sandbox Code Playgroud)

感谢您的任何输入,以帮助我把它带到我不会一遍又一遍地写相同的东西.

Yes*_*rry 3

你的问题有点模糊,但我会尽力而为。您说您将他们的权限存储在 array 中$permissions

public static $permissions = array();

public static function setPermissions($perms)
{
    if (!is_array($perms)) {
        throw new Exception('$perms must be an array.');
    }
    self::$permissions = $perms;
}

public static function hasPermission($section, $action)
{
    if (array_key_exists($section, self::$permissions)
        && in_array($action, self::$permissions[$section])
    ) {
        return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

使用该逻辑,当您从数据库读取用户的权限时,然后设置Class::$permissions静态变量,如下所示:

Class::setPermissions($permissions);
// ...
if (Class::hasPermissions($page, $action)) {
    // user has permission
}
Run Code Online (Sandbox Code Playgroud)

请注意,我的代码非常通用,并且在我获得更多信息之前必须保持这种状态。目前,我假设您的权限数组使用页面部分作为索引,并且该数组是用户有权访问的该页面部分中的操作列表。因此,假设$page已设置为类似的值"forums"并且用户当前正在尝试执行编辑(so $action = 'edit'),该Class::hasPermission()函数将返回 true。