【发布时间】:2017-06-23 17:17:33
【问题描述】:
我需要一个非常快速的字符串散列函数,它非常适合用 PHP 编写的 Web 应用程序。
我要解决的问题是在访问控制系统中为权限分配 ID。我正在考虑使用散列字符串来表示权限 ID。这样我就可以像这样检查权限:
if ($Auth->isAllowed($user, "blog.comment")) {
// Do some operation
}
...
if ($Auth->isAllowed($user, "profile.avatar.change")) {
// Do some other operation
}
数据库表会将权限哈希映射到用户的角色。要检查是否允许用户执行“profile.avatar.change”,将对相应的字符串进行哈希处理并对照 DB 表进行检查。
这非常方便,无需担心在不同模块之间维护唯一的权限 ID。但是散列函数应该非常高效。
【问题讨论】:
-
散列是单向的,所以除了它的存在之外,没有什么可以检查散列的。
-
最常见的方法是遵循linux的方法。 (使用 0-7 表示权限)。将 ID 分配给权限并执行 2^(id number) 以创建一个整数,然后以相同的方式展开它以确定您拥有哪些权限......或者只是传递带有一堆变量的对象/令牌并检查 $user- >can_change_stuff 或 $user->has_apples
-
@apokryfos,它不是重复的。这些都是我的问题。这个问题对字符串散列更具体。
-
@JayBlanchard,这正是我想要检查的 - 数据库表中是否存在某些特定权限。
-
将 8-16 字节字符串散列为唯一字符串的最快方法是不对其执行任何操作。只需按原样存储即可。虽然很短。
标签: php string hash permissions access-control