2008-08-19 61 views
8

我试过这样做了几次,没有运气。在阅读this post之后,它让我有兴趣再次这样做。那么有谁能告诉我为什么以下不起作用?在PHP中实现权限

<?php 

$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if($user == ($editor | $admin)) { 
    echo "Test";  
} 

?> 

回答

11

使用位或操作符(|)来设置位,使用AND运算符( &)来检查比特。您的代码应该是这样的:

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if($user & ($editor | $admin)) { 
     echo "Test";  
    } 

?> 

如果你不懂二进制和什么位运算符做,你应该去了解它。你会明白如何做得更好。

2

它已经,因为我用PHP很长一段时间,但我会认为这将工作:

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if(($user == $editor) || ($user == $admin)) { 
     echo "Test";  
    } 

?> 
1

(2 | 4)正在评估为6,但2 == 6为假。

1

@mk:(2 | 4)计算结果为6

1
$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if (user == $editor || $user == $admin) { 
    echo "Test"; 
} 
1

真棒,这似乎是做权限在CMS的最佳途径。是?没有?

也许,我从来没有真正这样做过。我所做的是使用按位运算符将大量“是或否”设置存储在数据库的单个列中的单个数字中。

我想获得权限,如果你想要在数据库中存储权限,这种方式会很好。如果有人想发布一些内容,而只希望管理员和编辑看到它,你只需要的

($editor | $admin) 

结果存储到数据库中,然后检查一下,这样做

if ($user & $database_row['permissions']) { 
     // display content 
} else { 
     // display permissions error 
} 
0

在我看来这并不好。我实际上并没有尝试在大型项目中使用它,但CMS使用这种方法听起来很复杂。

6

为了不重复发明轮子,为什么不看看ACL /认证系统,如Zend ACLZend Auth?两者都可以独立于Zend Framework整体使用。访问控制是一个棘手的情况,所以它至少可以帮助人们了解其他系统如何实现它。

0

它总是取决于你需要什么。如果你已经知道了Zend Framework,那么我会先介绍一下Zend_Acl/_Auth的建议。但请记住,每个框架都可以提供类似的组件。

想到的另一件事是LiveUser。我也很喜欢与它一起工作。我认为你可以做很多事情,而你的方法看起来很简单,但它也是有限的,因为(通过所有这些if()的),你会把很多ACL逻辑放在正确的位置你的申请。为了保持简单和可扩展性,这不是最重要的事情。 ;)

2

我已经在错误报告中使用了它,它工作得很好。至于用户权限,它应该工作得很好 - 您可以为数据库中的每个用户权限或数据库中的一个用户级别列创建多个列。去这个选项。