[英]PHP BitWise Permissions & Roles, or Alternatives
我正在做我的第一個應用程序,其中包含多個用戶的權限和角色。 我的理解是最好的方法是使用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
權限。
hasAccess()
提供一個權限,停止使用|
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.