我正在创建自定义摄影CMS系统并需要实现用户身份验证和权限系统。业界通常的惯例是创建这样的模式。如何构建cms的用户权限
基本上我需要有用户,并且用户可以是不同类型的。有些用户可以说只能创建画廊,其他用户只能编辑它们,或者只能编辑某些画廊等。所以应该如何构建。我正在使用MySQL数据库,我正在使用PHP来编写CMS。
我试图寻找在谷歌不过才发现这解释了如何创建实际的MySQL数据库用户的文章。我会很感激链接到一篇文章,这篇文章解释了如何完成这些东西。
预先感谢您。
我正在创建自定义摄影CMS系统并需要实现用户身份验证和权限系统。业界通常的惯例是创建这样的模式。如何构建cms的用户权限
基本上我需要有用户,并且用户可以是不同类型的。有些用户可以说只能创建画廊,其他用户只能编辑它们,或者只能编辑某些画廊等。所以应该如何构建。我正在使用MySQL数据库,我正在使用PHP来编写CMS。
我试图寻找在谷歌不过才发现这解释了如何创建实际的MySQL数据库用户的文章。我会很感激链接到一篇文章,这篇文章解释了如何完成这些东西。
预先感谢您。
对于这个问题有两种常见的方法,都涉及分崩离析所允许的操作成离散的东西,你可以命名。 (删除帖子,创建画廊,升级代码,转储数据库,启动导弹,打开车库门。)在位图中为每个位图提供一个位图(如果您打算拥有少于32个权限,这是一个很好的和紧凑的存储机制;如果你认为它会增长超过32个权限,一个典型的整数的大小,那么也许在你的数据库中的表。)
所以,您可以映射用户直接权限(“我想要授予gallery_create
至sarnold
“),或者您可以通过用户类映射用户和权限(”我想授予gallery_create
给art_curator
类的所有成员;然后我希望将用户sarnold
从docent
提升为art_curator
“)。
如果直接用户映射到许可,您可以在部署多年后发现奇怪的权限的大杂烩。如果将用户映射到类,则可能会发现自己具有人为类的用户,因为您信任一个具有特权的特定人员,但不信任其他特权。
搞清楚解决这一映射的最佳方法仍然是一个悬而未决的问题;我已经写了关于不同类型的许可模型Modelling a permissions system,这些模型可能太多或可能太少,这取决于您希望系统变得多么复杂。
如果你想只存储权限的位图(例如,Linux内核的实施CAPABLE()
为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;
...
然后,当你需要测试的功能:
if (CAPABLE(user, CAP_SYS_ADMIN))
reboot_server();
和宏观CAPABLE()
可以看起来像:
的#define兼容(用户,帽)((用户) - >权限&(帽))
(原谅C,我只是不知道PHP的非常好;我一直被迫修复太多的PHP错误,想自己学习。)
如果你想通过用户类映射用户的权限,那么它可能是三个表:一个users
表,groups
或classes
表和permissions
表。 classes
有user_id
和permission_id
的列。当您需要检查是否可以授予权限时,请选择用户的班级,然后选择班级中的权限。 (它也已经多年,因为我已经手写的SQL,我敢肯定,一个查询可以给你一个是或否的答案,但我不知道这是否将是一个多表连接或使用子查询,或者如果它会是更容易使两个查询数据库。:)
希望这有助于。
看看PEAR Live_User。它有点旧,从未成为标准,但它处理大多数微管理权限。 – mario 2011-01-11 06:40:08