网站用户帐户目录访问

时间:2012-03-16 07:14:08

标签: php mysql yii user-management

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

如果您有任何想法或建议,请发表回复^^ 感谢

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

我知道但有重大缺点的解决方案:

1)是将所有文件存储在数据库中(缺点:从PHP 4开始,这是一个非常糟糕的做法,我觉得这不是一个好习惯)

2)是让上传的文件受到htaccess的保护,并让php渲染上传的文件(缺点:另一个不好的做法,这使得网络应用加载速度很慢。例如私有图像将使用php加载。如果有很多私人图像将同时加载到同一页面中)

2 个答案:

答案 0 :(得分: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),这将返回true或false,他可以更新或不更新您可以执行与您的案例相似的酒店

答案 1 :(得分:2)

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