【发布时间】:2017-10-21 05:16:09
【问题描述】:
假设我有一个使用以下 4 个实体定义的架构:
Users
-> Timeline (fk: userId)
-> Entries (fk: timelineId)
-> Tags (fk: entryId), where fk means foreign key.
现在,假设我想检查 Web 应用程序是否有用户有权删除特定标签。现在我使用基本身份验证,检查数据库中是否存在用户的电子邮件//密码,如果存在,则获取 userId。
由于 userId 仅存在于 Timeline 实体上,我觉得我需要执行以下操作:
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 web-services security permissions acl