网站用户帐户目录访问


Website User Account Directory Access

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

如果你有任何想法或建议,请发布一个答案^^感谢

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

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

1) 是将所有文件存储在数据库中(缺点:这是一个非常糟糕的做法,因为在PHP4时代,我认为这不是一个好的做法)

2) 是让上传的文件受到htaccess的保护,并让php呈现上传的文件(缺点:另一种糟糕的做法,它使web应用程序加载速度非常慢。例如,将使用php加载私人图像。如果在同一页面中同时加载许多私人图像,该怎么办)

我认为您唯一的选择是将文件从公共web目录中移出并使用类似的东西。您只需要将文件的ID存储在数据库中,而不是整个文件。

为此,您必须使用Role Base Access Control,幸运的是Yii提供了非常强大的RBAC实现。基于角色的访问控制是您的专长。你必须使用商业规则。有一种或多种方法,但这是最好的

例如

$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),它将返回true或false,表明他可以更新或不更新该酒店,您可以对您的案例执行类似操作