我的问题不是代码导向,而是关于设计/架构。我正在建立一个拥有极其复杂的用户权限的网站,我希望能够轮询堆栈溢出天才池,看看是否有人有任何好主意或建议:-D。
我正在处理使用tank auth进行codeigniter的用户授权/跟踪,因此基本用户验证不是我要查询的问题。此外,正如我所说,该项目将需要处理一组非常复杂的用户权限,而简单的用户角色分配不会削减它。让我尝试尽可能清楚地解释网站行为。
该项目具有一种社交网络基础。用户将能够创建组,其他成员将能够加入该组。此外,用户可以创建和/或属于多个组,没有大小限制。因此,假设网站变得流行(这里希望......),那里可能存在500个组,其中一个可能有5个成员,另一个组可能有1000个;每1000个属于2,3或20个其他组。多对多这个术语似乎并不足够。
所以我的计划是通过数据库跟踪这些权限。但是,如果我尝试跟踪其成员的数据记录,我最终会遇到两个问题之一。将属于单个单元格中的组的用户列为字符串会使更新/访问数据成为噩梦。例如,如果用户取消注册该站点,则db必须遍历每个组的权限字段以删除该用户。另一方面,如果我在该记录的单个单元格中跟踪每个用户的id#,可以轻松选择/删除数据,但最终我遇到了无法管理的字段数量的问题。我们假设我留出了100个字段来存储用户ID。如果一个组需要101,那么一切都会中断。这也存在大多数组包含大量空字段的问题。
目前我能够想到的最好的方法是一个包含三个字段的单独表,PERMISSION_ID,(一个基本无用的主键)GROUP_ID和USER_ID;这样每个权限都是一个单独的记录。它困扰着我,并且反对我所学到的关于数据库的东西,有一个无用的(好的,不存在的)主键,但这是我能够想到的最好的方法。至少通过这种方式,可以通过组ID或用户ID轻松搜索和更新表。
在我开始实际实施此解决方案之前,我想我会问是否有一些我忽略的事情,或者是否有人有更好的方法。我完全愿意被另一个天才所贬低。对不起,这个问题很冗长,我想尝试清楚地说明情况。感谢您抽出宝贵时间阅读,以及您可能提出的任何建议。