[英]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.