gpt4 book ai didi

php - 存储用户权限的最佳方式?

转载 作者:可可西里 更新时间:2023-10-31 23:05:20 25 4
gpt4 key购买 nike

设计一个相当复杂的站点,在单个页面上运行大量 ajax。我已经到了某些用户需要特定权限才能执行某些操作而某些用户需要停止操作的地步。我已经在我的数据库中设置了用户角色并且一切正常,但我想知道是否有更简单/更安全的方法来存储每个权限。

目前,当用户登录时,他们的特定权限将从数据库中获取并加载到 session 数组中。要检查用户是否有权限,我只是检查权限是否包含在数组中。这看起来很缓慢,几乎就像我缺少更好的解决方案一样。

此外, session 显然可以由用户编辑...有没有更安全的方法?

我曾想过为每个检查运行一个查询,但这可能会大大增加一个简单的 ajax 请求的加载时间。

我对任何想法都持开放态度。谢谢。

最佳答案

首先,用户不能编辑 session 变量。唯一保存在用户机器上的是 session ID。然后服务器使用该 ID 来获取仅存储在服务器上的键/值对。从客户的角度来看,不可能随心所欲地更改值。

其次,我不会太担心数据库连接。避免重复自己,但不要太担心第一次连接。

最后,我最喜欢在不创建角色的情况下执行多重权限的方法是使用二进制数学。有些人喜欢,有些人不喜欢,但我发现它很有用。

要使用这种方法,成像我们定义了以下值:

CAN_EDIT_SOMETHING        = 1     // Powers of 2
CAN_SEE_SOMETHING_ELSE = 2
CAN_DO_ADMIN_STUFF = 4
... = 8

要给人们多个权限,使用二进制或

PERMISSIONS = CAN_EDIT_SOMETHING | CAN_DO_ADMIN_STUFF

为了说明这是如何工作的,我们可以看一下这些位:

   0b0001
OR 0b0100
---------
0b0101

要检查某人是否有权限,使用二进制 AND

if( PERMISSIONS & CAN_EDIT_SOMETHING != 0 ) {
}

为了了解这是如何工作的,我们再次查看这些位

    0b0101
AND 0b0001
----------
0b0001 // Not equal to 0. They must have that permission!

这种方法的最后一个好处是它允许您轻松地将多个权限组合成“元权限”

// If both EDIT_SOMETHING and ADMIN_STUFF are tasks that an admin
// can perform, we can combine them easily
//
IS_FULL_ADMIN = CAN_EDIT_SOMETHING | CAN_DO_ADMIN_STUFF


// We can then use this value exactly as we do any other permission
//
PERMISSIONS = IS_FULL_ADMIN | CAN_SEE_SOMETHING ELSE

如果你想使用它,但它是你武器库中的一个很好的技巧。

关于php - 存储用户权限的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3673768/

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