簡體   English   中英

用於在 mysql 中列出文件和文件夾的隱私設置

[英]Privacy settings for listing file and folders in mysql

我想根據我的隱私設置列出文件夾和文件。 它在向創建者展示時沒有看到其他指定用戶,沒有任何問題。 僅列出公用文件夾。

角色:

1:定制

2:特定用戶

3:特定滾輪

4:公開/所有人開放

創建者查詢:

SELECT 
f.file_id, f.is_folder, f.file_name, f.name as folder_name, f.created_at, f.privacy, f.users, f.roles, (SELECT name FROM users WHERE id = f.created_by) AS name, (SELECT surname FROM users WHERE id = f.created_by) AS surname 
FROM files AS f 
WHERE 
CASE 
WHEN f.privacy = 2 THEN ((f.users IS NOT NULL AND FIND_IN_SET(1, f.users)) OR f.created_by = 1) 
WHEN f.privacy = 3 THEN ((f.roles IS NOT NULL AND FIND_IN_SET(1, f.roles)) OR f.created_by = 1) 
WHEN f.privacy = 4 THEN (f.created_by = 1 OR f.created_by <> 1) 
ELSE f.created_by = 1 
END 
AND f.folder_id = 0 
ORDER BY f.name ASC LIMIT 0, 25

http://sqlfiddle.com/#!9/bae05e/5/0

受讓人查詢:

SELECT 
f.file_id, f.is_folder, f.file_name, f.name as folder_name, f.created_at, f.privacy, f.users, f.roles, (SELECT name FROM users WHERE id = f.created_by) AS name, (SELECT surname FROM users WHERE id = f.created_by) AS surname 
FROM files AS f 
WHERE 
CASE 
WHEN f.privacy = 2 THEN ((f.users IS NOT NULL AND FIND_IN_SET(10, f.users)) OR f.created_by = 10) 
WHEN f.privacy = 3 THEN ((f.roles IS NOT NULL AND FIND_IN_SET(2, f.roles)) OR f.created_by = 10) 
WHEN f.privacy = 4 THEN (f.created_by = 10 OR f.created_by <> 10) 
ELSE f.created_by = 10 
END 
AND f.folder_id = 0 
ORDER BY f.name ASC LIMIT 0, 25

http://sqlfiddle.com/#!9/bae05e/6/0

我對查詢做了一些修復

  1. 而不是一個嵌套的查詢來獲取用戶信息,一個簡單的 LEFT JOIN 到用戶
  2. 將 CASES 更改為更簡單的獨立 IFS,每個都返回 TRUE 或 false,這允許我在它們之外提取 u.id = 10
  3. 使用 LOCATE 而不是 FIND_INSET,來搜索字段內的用戶/滾輪 ID

希望這可以幫助

SELECT
    f.file_id, f.is_folder, f.file_name, f.name as folder_name, f.created_at, f.privacy, f.users, f.roles
    , u.name, u.surname
FROM
    files AS f
    LEFT JOIN users u ON u.id = f.created_by
WHERE
    (
        (f.privacy = 2 AND LOCATE(IFNULL(f.roles,''),10))
    OR
        (f.privacy = 3 AND LOCATE(IFNULL(f.roles,''),2))
    OR
        f.privacy = 4
    )   
    AND f.folder_id = 0
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM