2011-01-11 54 views
5

我正在创建自定义摄影CMS系统并需要实现用户身份验证和权限系统。业界通常的惯例是创建这样的模式。如何构建cms的用户权限

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

我试图寻找在谷歌不过才发现这解释了如何创建实际的MySQL数据库用户的文章。我会很感激链接到一篇文章,这篇文章解释了如何完成这些东西。

预先感谢您。

+0

看看PEAR Live_User。它有点旧,从未成为标准,但它处理大多数微管理权限。 – mario 2011-01-11 06:40:08

回答

5

对于这个问题有两种常见的方法,都涉及分崩离析所允许的操作成离散的东西,你可以命名。 (删除帖子,创建画廊,升级代码,转储数据库,启动导弹,打开车库门。)在位图中为每个位图提供一个位图(如果您打算拥有少于32个权限,这是一个很好的和紧凑的存储机制;如果你认为它会增长超过32个权限,一个典型的整数的大小,那么也许在你的数据库中的表。)

所以,您可以映射用户直接权限(“我想要授予gallery_createsarnold“),或者您可以通过用户类映射用户和权限(”我想授予gallery_createart_curator类的所有成员;然后我希望将用户sarnolddocent提升为art_curator“)。

如果直接用户映射到许可,您可以在部署多年后发现奇怪的权限的大杂烩。如果将用户映射到类,则可能会发现自己具有人为类的用户,因为您信任一个具有特权的特定人员,但不信任其他特权。

搞清楚解决这一映射的最佳方法仍然是一个悬而未决的问题;我已经写了关于不同类型的许可模型Modelling a permissions system,这些模型可能太多或可能太少,这取决于您希望系统变得多么复杂。

如果你想只存储权限的位图(例如,Linux内核的实施CAPABLE()CAP_SYS_ADMINCAP_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表,groupsclasses表和permissions表。 classesuser_idpermission_id的列。当您需要检查是否可以授予权限时,请选择用户的班级,然后选择班级中的权限。 (它也已经多年,因为我已经手写的SQL,我敢肯定,一个查询可以给你一个是或否的答案,但我不知道这是否将是一个多表连接或使用子查询,或者如果它会是更容易使两个查询数据库。:)

希望这有助于。