我想在项目中创建类似权限的内容。 我如何检查字符串匹配数组中的正则表达式之一?
//Array of user (group) permissions.
$arrayOfPermissions = [
'admin.users.edit',
'admin.users.*',
'dashboard.view',
];
//Check is this permission presents in array
$stringToMatch = 'admin.users.view';
*
表示用户拥有此群组中的所有权限。
例如:
如果用户有权限admin.users.*
,那么他应该通过admin.users.view
UPD: 我现在用它,但看起来这不好。
private function checkPerms($permission)
{
$arrayOfPermissions = [
'admin.dashboard.view',
'admin.users.*'
];
foreach ($arrayOfPermissions as $perm)
{
if(preg_match("/".$perm."/", $permission))
{
return true;
}
}
return false;
}
//This should return `true`
checkPerms("admin.users.view");
P.S。我用Laravel。
答案 0 :(得分:1)
假设权限数组包含以通配符(*
)结尾的权限或具有全名的权限。
迭代权限,
*
),请检查要检查的权限是否以其开头代码:
echo hasPermission($arrayOfPermissions, $stringToMatch) ? "Has Access" : "Access Denied";
function hasPermission($arrayOfPermissions, $stringToMatch)
// Iterate through all permissions
foreach ($arrayOfPermissions as $permission) {
// Check if permission contains a wildcard
if(strpos($permission, '.*')) {
$prefix = substr($permission, 0, strpos($permission, '.*'));
if(startsWith($stringToMatch, $prefix))
return true;
// Else, match completely
} else {
if($permission == $stringToMatch)
return true;
}
}
return false;
}
function startsWith($string, $test)
{
$length = strlen($test);
return (substr($string, 0, $length) === $test);
}
答案 1 :(得分:0)
你可以通过in_array()检查或者你对这些值进行内爆,正则表达式是这样的:/(permission1 | permisson2 ..)/
答案 2 :(得分:-1)
我想这是你能做的:
不需要正则表达式。