我们有一个在 php 和 mysql 上运行的现有应用程序。我们正在添加细粒度的用户授权,以便某些用户只能访问某些资源。有几千名用户和大约 100 种资源(尽管两者都有望增长)。
我的数据库设计是这样的:
用户: 身份证,姓名,电子邮件
资源: id, 资源
选项 1 因此,如果我们考虑到典型的数据库规范化来处理这个问题,我们也会得到下表。我想我们会遵循用户被拒绝权限的结构,除非 user_resources 表中有记录。如果他们对特定资源的权限随后被删除,那么我们只需从 user_resources 表中删除该行。
*用户资源:* user_id, resources_id
选项 2 另一种选择是忘记 user_resources 表,只在用户表中创建一个新列(称为权限或类似列),并将该用户权限的序列化值存储在用户表中。每次我们需要检查用户的权限时,我们都必须反序列化该值。
哪种方法被认为是更好的做法,这两种方法是否有任何主要的优点或缺点?
最佳答案
选项 1 是可行的方法,除非您有充分的理由反对它。向用户表添加一列对于基于角色的权限来说很好。如果您的权限基于角色但允许分配不同的权限,则可以混合使用这两个选项 - 然后仅在表中写入异常(exception)情况。
关于php - MYSQL数据库设计序列化与否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6774327/