gpt4 book ai didi

PHP BitWise 权限和角色,或替代方案

转载 作者:行者123 更新时间:2023-12-05 05:28:10 25 4
gpt4 key购买 nike

我正在开发我的第一个应用程序,其中包含多个用户的权限和角色。我的理解是最好的方法是使用 BitWise 格式。这是真的吗,还是有更好的选择?

这是我当前的测试代码,我得到了一个相当奇怪的效果。如果有人能阐明为什么会这样,我们将不胜感激。

示例:

$user = array('permissions' => 1); // This *should* return ONLY READ, (except it shows all)
$user = array('permissions' => 8); // Shows correct, FULL resources.

您可以使用它来测试代码... http://writecodeonline.com/php/

define("PERM_R", 1);  # Read    
define("PERM_W", 2); # Write
define("PERM_E", 4); # Edit
define("PERM_D", 8); # Delete

define("ROLE_GUEST", PERM_R);
define("ROLE_EDITOR", ROLE_GUEST | PERM_W | PERM_E);
define("ROLE_FULL", ROLE_EDITOR | PERM_D);

function hasAccess($user, $action) {
if( is_array($user) ) {
return $user['permissions'] & $action;
} else if ( is_int($user) ) {
return $user & $action;
}
}


$user = array('permissions' => 1);
echo "USER PERMISSIONS: ". $user['permissions'] ."<br /><br />";

# TEST PERMS
if(hasAccess($user, PERM_R)) {
echo PERM_R;
echo " - Yes you can see READ <br />";
}
if(hasAccess($user, PERM_R | PERM_W)) {
echo PERM_R | PERM_W;
echo " - Yes you can see READ & WRITE<br />";
}
if(hasAccess($user, PERM_R | PERM_W | PERM_E)) {
echo PERM_R | PERM_W | PERM_E;
echo " - Yes you can see READ & WRITE & EDIT<br />";
}
if(hasAccess($user, PERM_R | PERM_W | PERM_E | PERM_D)) {
echo PERM_R | PERM_W | PERM_E | PERM_D;
echo " - Yes you can see READ & WRITE & EDIT & DELETE<br />";
}

# TEST ROLES
if(hasAccess($user, ROLE_GUEST)) {
echo ROLE_GUEST;
echo " - Yes, You Are A GUEST <br />";
}
if(hasAccess($user, ROLE_EDITOR)) {
echo ROLE_EDITOR;
echo " - Yes, You Are A EDITOR <br />";
}
if(hasAccess($user, ROLE_FULL)) {
echo ROLE_FULL;
echo " - Yes, You Are A FULL <br />";
}

最佳答案

问题是您只是返回按位 & 的结果,对于您的所有测试,该结果至少为 1/true 因为所有用户都有R 权限。

  1. 只向hasAccess() 提供一个权限,停止使用|
  2. 编写一个新函数来确定执行整数比较的用户级别。

关于PHP BitWise 权限和角色,或替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478462/

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