如何构建cms的用户权限

mik*_*725 5 php database authentication permissions structure

我正在创建一个自定义摄影CMS系统,需要实现用户身份验证和权限系统.在创建此类模式时,业界通常采用的做法是什么?

基本上我需要有用户,而用户可以是不同类型的.有些用户可以说只能创建画廊,其他用户只能编辑它们,或者只编辑某些画廊等等.那么应该如何构建它.我正在使用MySQL数据库,我正在使用PHP来编写CMS代码.

我尝试在Google上查找但是只找到了解释如何为实际MySQL数据库创建用户的文章.我将欣赏一篇文章的链接,该文章解释了应该如何完成这类工作.

先感谢您.

sar*_*old 6

这个问题有两种常见的方法,都涉及将允许的操作分解为您可以命名的离散操作.(删除帖子,创建画廊,升级代码,转储数据库,发射导弹,打开车库门.)在bitvector中给每个这样的位图(如果你想要少于32个权限,这是一个很好的和紧凑的存储机制;如果你认为它将超过32个权限,一个典型整数的大小,那么可能是数据库中的一个表..)

所以,你可以映射用户直接权限("我要授权gallery_createsarnold'),也可以通过用户的类别(’我希望授予用户映射和权限gallery_create的所有成员art_curator的类,然后我想,以促进用户sarnolddocentart_curator").

如果您直接将用户映射到权限,您可能会在部署年后发现一些奇怪的权限.如果您将用户映射到类,您可能会发现自己使用了人为的用户类,因为您信任某个具有特权的特定人员,而不是其他特权.

找出解决这种映射的最佳方法仍然是一个悬而未决的问题; 我写过关于不同类型的权限模型的建模可能过多的权限系统或信息太少,这取决于您希望系统变得多么复杂.

如果您只想在位图中存储权限(例如,Linux内核的CAPABLE()for CAP_SYS_ADMIN,CAP_DAC_OVERRIDE等等的实现),那么您可以添加一些非常简单的新权限:

if (requested_new_permission == "CAP_SYS_ADMIN")
  user->permissions |= CAP_SYS_ADMIN;
else if (requested_new_permissions == "CAP_DAC_OVERRIDE")
  user->permissions |= CAP_DAC_OVERRIDE;
Run Code Online (Sandbox Code Playgroud)

...

然后,当您需要测试功能时:

if (CAPABLE(user, CAP_SYS_ADMIN))
  reboot_server();
Run Code Online (Sandbox Code Playgroud)

CAPABLE()可以看起来像:

#define CAPABLE(用户,上限)((用户) - >权限和(上限))

(原谅C,我只是不太了解php;我被迫修复了太多的php错误,想要自己学习它.)

如果要通过用户类将用户映射到权限,则可能是三个表:users表,表groupsclasses表以及permissions表.classesuser_id和的列permission_id.当您需要检查是否可以授予权限时,请选择用户的类,然后在类中选择权限.(自从我手写SQL以来已经好几年了;我确信单个查询可以给你一个是或否答案,但我不确定它是多表连接还是使用子查询或者它是否是只会更容易对数据库进行两次查询.:)

希望这可以帮助.