0

我正在用 PHP 构建一个 Web 应用程序。用户将使用他们的帐户访问。他们将在系统中拥有图片、笔记等资源,就像在 Facebook 中一样。

我的第一个问题是不允许任何人访问帐户的私有资源。假设这是一张照片。有3种情况:

  1. 每个人都可以通过图片的 URL 访问该图片。
  2. 该图片所有者帐户的朋友帐户可以访问该图片。
  3. 只有所有者帐户可以看到该图片,其他人无法看到。即使有图片的网址。

我不知道 Facebook 是否会像第 1 点那样做。因为业务很重要,用户的隐私也很重要。

我的第一个想法是通过 PHP 文件进行所有资源访问。但过了一会儿,它看起来真的很复杂。

我的另一个想法是将所有资源的列表保存在数据库表中,并将隐私设置放在一起。这看起来是一个更好的主意,但我不确定性能会如何及时受到影响。

您有什么想法,您将如何构建这样的系统?

PS 我打算再添加一个 Web 应用程序,并创建一个共享资源区域来放置共享资源。我在那里也需要相同的特权系统。

4

2 回答 2

2

嗯..

  1. User_ID在应用程序中有“”。
  2. 你有你想访问的目录(url)。
  3. 这个目录有它的所有者“ User_ID”。像/store/user_9892/album_2/beer&girls.jpg

所以你可以执行一个 SQL 查询来检查目录中的“ User ID”是当前的应用程序执行者 ID 还是他的所有者是朋友。在这种情况下 - 授予访问权限。其他 - 使用 403 标头(或其他)重定向。
这意味着您不需要任何具有资源等的表。只需使用极快的 SQL 查询检查所有者\朋友状态。

编辑:
对于委派的其他帐户,您可以简单地添加到您的'user'表格字段中。例如,让我们命名'access_accounts'。可能是序列化数组,可能是特殊字符分隔的文本。同样我们所做的一切——检查一个 SQL 查询以获取当前 User_ID 的权限。

如果我们需要更进一步并定义任何文件夹的任何访问权限(对于任何人,对于任何人组等)......所以是的,我想必须有一个结构类似于[path]=>[access_id]. 但这个想法再次奏效——简单的一次 SQL 检查。

PS这一切意味着我投票赞成“通过PHP文件进行所有资源访问”。使用 php-script 可以很容易地完成,其中.htaccess包含一些 SQL 查询和规则。

于 2012-09-06T20:29:24.277 回答
1

根据我的经验,您可以通过将文件上传到不公开的目录来最好地解决这个问题。然后,您的数据库中还会有一些表,其中至少有三列:文件、您要为其提供的访问级别以及上传文件的用户

然后,您可以编写一些内容来检查访问用户是否有权访问该文件。首先,它将检索包含有关所提及文件的信息的列。根据该信息,如果用户有权访问,请使用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。获得网址后,您就可以查看图像本身,而不管上传图像的用户的隐私设置如何。

于 2012-09-06T21:41:56.227 回答