php – 如何实现论坛权限

我已经开始在我的MVC框架上用PHP开发一个论坛应用程序了,我已经到了为成员分配权限的阶段(例如:READ,WRITE,UPDATE,DELETE).

现在,我知道我可以在我的数据库的user表下添加5列,并将它们设置为1 | 0,但如果我想添加其他规则,例如MOVE,那对我来说似乎太多了.

我如何动态地将这些权限分别分配给用户?

我听说过使用过掩码,但如果我能继续使用它,那将是非常好的.

你有一个如何实现这个的例子吗?

解决方法:

您描述的方法 – 存储在列中的各个权限 – 是以直接的方式牺牲灵活性(如您所注意到的).

Zuul的方法更简单,与您的方法基本相同,只是它避免了任何“ALTER TABLE”语句的需要.但是,它没有规范化,不易查询,也不能自我记录.

这两种方法的另一个问题是,随着用户群的增长,您会发现保持每个人的权限设置正变得越来越困难.你会发现自己有很多需要完全相同特权的用户.然而,为了更改用户的权限(例如容纳新权限),您必须进入并将该权限添加到需要单独使用它的每个用户.主要PITA.

对于论坛,您不太可能需要每用户权限管理.您更有可能拥有某些类别的用户,如匿名用户,登录用户,版主,管理员等.这将使其非常适合基于角色的访问控制(RBAC).在此系统中,您可以为每个用户分配一个角色,并为该角色授予权限.权限将作为行存储在“权限”表中.所以简化的数据库模式看起来像:

PRIVILEGE
int id (primary key)
varchar description

ROLE_PRIVILEGE_JOIN
privilege_id (foreign key)
role_id (foreign key)

ROLE
int id (primary key)
varchar description

USER
int id (primary key)
int role_id (foreign key)

此模式用于处理用户权限的许多应用程序中.添加任何人可能在权限表中作为一行的所有权限;添加任何用户可能在角色表中拥有的每个角色;并在role_privilege_join表中适当地链接它们.

唯一真正的缺点是因为使用了连接表,“can user X do Y”查询会慢一些.

上一篇:位屏蔽(javascript):如何检查所有标志


下一篇:linux内核hook技术之函数地址替换