[英]Public and Private resource management
我正在用PHP構建一個Web應用程序。 用戶將使用其帳戶進行訪問。 他們將在系統中(例如在Facebook中)擁有諸如圖片,筆記等資源。
我的第一個問題是不允許任何人訪問帳戶的私有資源。 可以說這是一張圖片。 有3種情況:
我不知道Facebook是否會做點1。因為業務很重要,而且用戶的隱私也很重要。
我的第一個想法是通過PHP文件進行所有資源訪問。 但是過了一會兒,看起來真的很復雜。
我的另一個想法是將所有資源的列表保存在數據庫表中,並將隱私設置放在一起。 這看起來是個更好的主意,但是我不確定性能會如何及時受到影響。
您有什么想法,您將如何構建這樣的系統?
PS我打算再添加一個Web應用程序,並創建一個共享資源區域以將共享資源放入其中。 我在那里也需要相同的特權系統。
嗯..
User_ID
”。 User_ID
”。 像/store/user_9892/album_2/beer&girls.jpg
因此,您可以執行一個SQL查詢,該查詢檢查目錄“ User ID
”是否為當前應用程序執行者ID或所有者是否為朋友。 在這種情況下,請授予訪問權限。 否則-使用403標頭重定向(否則)。
這意味着您不需要任何帶有資源等的表。只需使用極其快速的SQL查詢來檢查owner \\ friend狀態。
編輯:
對於其他委派的帳戶,您可以簡單地將其添加到'user'
表字段中。.以例如'access_accounts'
名稱命名。 可能是序列化的數組,可能是特殊字符分隔的文本。 我們再次做了所有-在一個SQL查詢中檢查當前User_ID的權限。
如果我們需要進一步定義任何文件夾的訪問權限(對於任何人,任何人組等),那么...是的,我想必須有一個表,其結構類似於[path]=>[access_id]
。 但是這個想法再次奏效-簡單的一次SQL檢查。
PS這一切意味着我投票贊成“通過PHP文件進行所有資源訪問”。 使用.htaccess
和php-script以及一些SQL查詢和規則可以輕松完成此操作。
以我的經驗,您可以通過將文件上傳到不公開的目錄來最好地解決此問題。 然后,您的數據庫中還將有一些表,其中至少有三列:文件名 ,要為其提供的訪問級別以及上載該文件的用戶 。
然后,您可以編寫一些內容來檢查訪問用戶是否有權訪問該文件。 首先,它將檢索包含有關所提及文件的信息的列。 根據該信息,如果用戶有權訪問,請使用readfile (請參閱PHP手冊上的示例)顯示文件。 在其他所有情況下,您都只能顯示403禁止頁面。
在您的情況下,用於檢查訪問權限的函數如下所示:
function hasAccess($accesslevel, $owner, $visitor)
{
if ($accesslevel === 'public') {
return true;
}
if ($accesslevel === 'private') {
return $owner === $visitor;
}
if ($accesslevel === 'friends') {
return $owner === $visitor || isfriend($visitor, $owner);
}
}
這只是一個示例,您的實現可能會略有不同,具體取決於您的環境。
據我所知,Facebook只允許所有人查看所有文件,但是試圖創建一個難以猜測的URL。 擁有網址后,無論上傳圖片的用戶的隱私設置如何,您都可以查看圖片本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.