簡體   English   中英

公共和私人資源管理

[英]Public and Private resource management

我正在用PHP構建一個Web應用程序。 用戶將使用其帳戶進行訪問。 他們將在系統中(例如在Facebook中)擁有諸如圖片,筆記等資源。

我的第一個問題是不允許任何人訪問帳戶的私有資源。 可以說這是一張圖片。 有3種情況:

  1. 每個人都可以使用圖片的URL訪問該圖片。
  2. 該圖片所有者帳戶的朋友帳戶可以訪問該圖片。
  3. 只有所有者帳戶才能看到該圖片,其他任何人都看不到。 即使有圖片的URL。

我不知道Facebook是否會做點1。因為業務很重要,而且用戶的隱私也很重要。

我的第一個想法是通過PHP文件進行所有資源訪問。 但是過了一會兒,看起來真的很復雜。

我的另一個想法是將所有資源的列表保存在數據庫表中,並將隱私設置放在一起。 這看起來是個更好的主意,但是我不確定性能會如何及時受到影響。

您有什么想法,您將如何構建這樣的系統?

PS我打算再添加一個Web應用程序,並創建一個共享資源區域以將共享資源放入其中。 我在那里也需要相同的特權系統。

嗯..

  1. 您的應用程序中有“ User_ID ”。
  2. 您有要訪問的目錄(URL)。
  3. 該目錄中具有其所有者“ 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.

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