[英]Understanding Web App Permissions with MySQL
假设我有一个使用以下4个实体定义的架构:
Users
-> Timeline (fk: userId)
-> Entries (fk: timelineId)
-> Tags (fk: entryId), where fk means foreign key.
现在,假设我要在Web应用程序中签入用户是否有权删除特定标签。 现在,我使用基本身份验证,检查数据库中是否存在用户的电子邮件//密码,如果存在,请获取userId。
由于userId仅存在于时间轴实体上,因此我需要执行以下操作:
DELETE t.* FROM `tags` AS t
INNER JOIN `entries` AS e ON t.entryId = e.id
INNER JOIN `timelines` AS tl ON e.timelineId = tl.id
WHERE
tl.userId = ? AND
t.id = ?
这种方法有效,但我觉得效率不高。 取而代之的是,我可以将userId FK添加到每个表(例如标签),但这似乎也像一场维护噩梦。
除了实现某种其他类型的权限系统(例如使用ACL)之外,我无法想到任何其他方法。 有什么建议么?
我认为您可以从以下几种选择中进行选择:
基本上,总的来说,这是我认为的计算/存储权衡。 您要么每次都计算权限,要么将它们预先计算后存储在某个地方,这意味着您有时需要重新计算它们(但可能并非始终如此)。
正确的解决方案取决于您的实际情况。 我的经验是,在大多数情况下,不值得修复尚未损坏的东西(除非您当然知道在您要使用的情况下它不会以这种方式工作)。
在此处查看外键。 您可以简单地通过MySQL将关系添加到其他表,并在删除父级时级联删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.