Доступ к каталогу учетной записи пользователя веб-сайта - PullRequest
2 голосов
/ 16 марта 2012

эта проблема не является чем-то необычным, но у меня нет идеи, как мне это реализовать.У меня есть 500 зарегистрированных пользователей на моем мини-форуме, и у них есть файлы, загруженные на мой сервер.Поскольку мои пользователи уже отобразили мою структуру каталогов на моем веб-сервере, они смогли получить доступ к файлам, загруженным моими зарегистрированными пользователями, даже если они им не владеют.Я использую PHP-фреймворк под названием Yii и MySQL для управления моими пользователями, но Я хочу, чтобы мои пользователи обращались только к своим собственным файлам, а не к файлам других .Я подумываю об использовании htaccess, но такой подход немного неясен.

Если у вас есть идеи или предложения, пожалуйста, напишите ответ ^^ спасибо

Пример: у пользователя "mami" есть папкас именем "mamifolder", но пользователь "dadi" не может получить доступ к "mamifolder".Пользователь «dadi» может получить доступ только к «dadifolder»

Решения, которые я знаю, но у которых есть основные недостатки:

1) - хранить все файлы в базе данных (минусы: это действительно плохосо времен PHP 4, я думаю, что это не очень хорошая практика)

2) защищать загруженные файлы с помощью htaccess и позволить php отображать загруженный файл (минусы: еще одна плохая практика, которая делаетвеб-приложение загружается очень медленно. Например, частные изображения будут загружаться с помощью php. Что, если на одной странице одновременно будет загружено много частных изображений)

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Я бы сказал, что единственный вариант - переместить файлы из общедоступного веб-каталога и использовать что-то вроде this .Вам просто нужно хранить идентификаторы файлов в базе данных, а не весь файл.

2 голосов
/ 16 марта 2012

Для этого вам нужно использовать 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, тогда вам нужно создавать роли для ex manager или reader, что бы вы ни собиралисьзатем назначьте роль ребенка updateOwnHotel.

, когда вы выполняете операцию в приложении, вам просто нужно сделать Yii::app()->checkAccess('updateOwnHotel',$prams), которая будет возвращать true или false, которые он может обновлять, или не ту гостиницу, с которой вы можете сделать аналогичныеваш случай

...