首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么好的权限系统可以使用?

有什么好的权限系统可以使用?
EN

Stack Overflow用户
提问于 2010-12-06 20:37:41
回答 3查看 752关注 0票数 4

我知道vBulletin使用bitperms,我也在使用它们,但是当我到达10^63时,它们停止工作了,它不能处理任何大于这个数的数字(它是我的PHP主机)。

我很想知道网络上的myBB, PhpBB, IPB, Joomla和其他脚本使用什么权限系统,我真的很想在我的脚本中使用一个快速的权限设置。现在,我已经在每个用户上实现了一个名为permgroups的sql变量,并将有一个值,例如1,4,5,其中每个数字对应一个权限组,该权限组有一个类似的变量,称为canseepages 1,2,3,4,1,4,1,54,6,4,5,22,6,2,3,4,1,2,它对应于我拥有的每个页面。

首先,我在PHP中选择permgroups

然后,我在permgroups上使用PHP的explode

然后,我对用户可以看到的每个perm组执行foreach

在foreach中,我运行sql查询从权限组中获取canseepages变量

然后我把它附加到一个变量上,这样我就得到了大量的东西,比如

代码语言:javascript
复制
$variable = '1,2,3,4,5,6,7,8,9,2,22,55,44,55,33,44,11,44,33,44,11,33,44,'.
'22,33,44,11,22,33,44,33,11,22,33,44,33,22,33,44,55,44,'.
'55,54,26,77,84,645,345,233,11,4,11,3,32';

该变量表示允许用户查看的所有页面。然后我将其分解成一个数字数组,并使用in_array()检查他们试图查看的当前页面是否在允许他们查看的页面数组中。

它现在相当快,但我只是在想,一般来说,肯定有一种更快的方法来完成所有这些工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-06 21:49:16

很久以前,我就知道位掩码是用户权限的最佳解决方案:

简短的示例:

代码语言:javascript
复制
class UserPermissions()
{
    private $Mask = 0;

    //Levels
    const PUBLIC_READ = 1;
    const PUBLIC_WRITE = 2;
    const PUBLIC_EDIT = 4
    const PUBLIC_DELETE = 8;
    //ETC

    public function __construct($Mask)
    {
        $this->Mask = $Mask;
    }

    public function InvokePermission($Bit)
    {
        return ($Mask & $Bit); //True / False
    }

    public function AddPermission($Bit)
    {
        $this->Mask |= $Bit; //Add the bit to the mask
    }

    public function RevokePermission()
    {
        $this->Mask &= ~ $Bit;
    }

    public GetMask()
    {
         return $this->Mask;
    }
}

简单的用法如下:

代码语言:javascript
复制
$Permissions = new UserPermissions($User->PermissionsData);

if($Permissions->InvokePermission( Permissions:: PUBLIC_EDIT ))
{
    //Use can edit
}

一些链接:

票数 1
EN

Stack Overflow用户

发布于 2010-12-06 20:43:24

这可能不适用于您,但通常您会将权限应用于系统的各个部分,而不是单个页面。例如,你可能有一个'admin‘权限,可以解锁所有大的adminy部分。

您可以使用管理员perm来解锁在系统中添加、编辑和删除用户的功能。因为极少有人需要能做这些事情中的一件,但不是全部。

另一种方法是特定于任务的权限系统。这个站点使用了一个,你已经使用了足够长的时间来获得其中的一些。

票数 4
EN

Stack Overflow用户

发布于 2010-12-06 21:27:37

为什么不使用整数数组作为位掩码呢?然后你只需像这样做

代码语言:javascript
复制
$ndx = $pageNo / PHP_INT_SIZE;
$bit = $pageNo % PHP_INT_SIZE;
$canAccess = $permArray[$ndx] & (1<<$bit);

$pageNo是用户尝试访问的页面编号,$permArray是表示组允许的页面的整数数组。如果设置了页面对应的位,则用户可以访问该页面。

(如果语法错误,很抱歉,我很久没有使用PHP了。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4366450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档