【问题标题】:Website User Account Directory Access网站用户帐户目录访问
【发布时间】:2012-04-01 18:19:46
【问题描述】:

这个问题并不少见,但我真的不知道如何实现它。 我的迷你论坛中有 500 个注册用户,他们在我的服务器上上传了文件。 由于我的用户已经在我的网络服务器中映射了我的目录结构,因此他们能够访问我的注册用户上传的文件,即使他们不拥有它。 我使用一个名为 Yii 和 MySQL 的 PHP 框架来管理我的用户,但是我想让我的用户只访问他们自己的文件,而不是其他人的文件。我正在考虑使用 htaccess,但这种方法有点晦涩。

如果您有任何想法或建议,请发表答案^^ 谢谢

示例: 用户“mami”有一个名为“mamifolder”的文件夹 但用户“dadi”不能访问“mamifolder”。用户“dadi”只能访问“dadifolder”

我知道但有主要缺点的解决方案:

1) 是将所有文件存储在数据库中(缺点:自 PHP 4 以来这是一个非常糟糕的做法,我认为这不是一个真正的好做法)

2) 是让上传的文件受 htaccess 保护,让 php 渲染上传的文件(缺点:另一个不好的做法,它使 web 应用程序加载非常慢。例如,私人图像将使用 php 加载。如果同一页面会同时加载多个私有图片)

【问题讨论】:

    标签: php mysql yii user-management


    【解决方案1】:

    我会说您唯一的选择是将文件移出您的公共网络目录并使用this 之类的东西。您只需将文件的 ID 存储在数据库中,而不是整个文件。

    【讨论】:

    • 这个解决方案会很慢吗?我将同时在同一页面中渲染 10 多个图像..
    • 但是您现在如何加载它们?你要加载图片的缩略图吗?
    • 只是带有文件绝对路径的 标签?我不能保证,但这不会变慢,如果你在一个页面中加载的所有图片都属于同一个用户,那么它只是一个要添加的查询,如果你想保护你不要的图片'没有太多选择。
    【解决方案2】:

    为此你必须使用Role Base Access Control 幸运的是Yii 提供了非常强大的RBAC 实现。Role-Based Access Control 是你的事。您将不得不对它使用业务规则。有一种或多种方法,但这是最好的一种

    举例

    $this->_authManager->createOperation("updateHotel","update Hotel information"); 
    $bizRule='return Yii::app()->user->id==$params["model"]->user_id;';
    $task = $this->_authManager->createTask("updateOwnHotel","update hotel by manager himself",$bizRule);
    $task ->addChild("updateHotel"); 
    $role=$this->_authManager->createRole("manager"); 
    $role->addChild("updateOwnHotel");
    

    现在上面的代码做了什么? 它创建一个操作updateHotel,然后创建带有参数的业务规则,然后您创建应该在示例中执行的任务updateOwnHotel 那么您必须为前managerreader 创建角色,然后将角色分配给updateOwnHotel 的孩子。

    在应用程序中进行操作时,您只需要执行Yii::app()->checkAccess('updateOwnHotel',$prams) 这将返回真或假,他可以更新或不可以对您的案例进行类似操作的酒店

    【讨论】:

    • Yii 的 RBAC 是基于授权项的...这意味着我只能禁止在我的控制器中进行未经授权的操作,而不能访问文件。
    • 不,你必须定义 Roles,Tasks 和类似这样的东西,请参阅更新 ans
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多