gpt4 book ai didi

php - 使用 fnmatch() 测试 level1.level2.level3 中的权限

转载 作者:搜寻专家 更新时间:2023-10-31 21:36:39 25 4
gpt4 key购买 nike

我目前正在研究用 PHP 重新构建不久前构建的权限系统。当前版本具有确切的权限,因此对于管理员,您将拥有以下权限:

acl.manage.self
acl.manage.others

也就是说,用户有权管理他自己以及其他人的权限。

然而,在开发一些新应用程序时,我试图通过以下方式让自己访问我的整个应用程序,从而利用当前的权限系统:

lst.*

这样我就不必给自己一堆 .view .manage

似乎现有系统不理解 * 通配符。所以我坐在这里试图重写“has_permission”

因此我在当前的工作测试环境中创建了一个具有以下权限的用户:

array(3) { [0]=> string(1) "*" [1]=> string(15) "fake.permission" [2]=> string(27) "none.of.these.should.matter" } 

从技术上讲,唯一重要的权限是 [0],它表示我应该有权做任何我想做的事。

我不知道如何在我的方法中实现这个流程:

function has_perm($perm){
//if I am checking if I have the perm 'acl.manage.all'
//This function should return true if I have any of the following:
// *, acl.*, acl.manage.*, acl.manage.all

//exact check
foreach($this->perms as $p){
if($p===$perm){ return true; }
}

}

任何朝着正确方向的插入都会很棒。

最佳答案

如果所需的权限 $perm 与您的任何权限 $p 完全匹配,您当前的代码将返回 true。

如果所需的权限 $permfnmatch() 中的任何一个匹配,您只需将其更改为返回 true模式 $p.

试试这个:

foreach($this->perms as $p) {
if (fnmatch($p, $perm)) { return true; }
}

您不需要保留精确匹配检查,因为如果您的权限不包含通配符,fnmatch() 仍会检测精确匹配。

关于php - 使用 fnmatch() 测试 level1.level2.level3 中的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17715193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com