2012-03-16 5 views
2

이 문제는 드문 일이 아니지만 실제로 구현할 수있는 방법이 없습니다. 내 미니 포럼에 500 명의 등록 사용자가 있으며 내 서버에 파일을 업로드했습니다. 내 사용자가 이미 내 웹 서버에서 내 디렉토리 구조를 매핑 했으므로 내 등록 된 사용자가 업로드하지 않은 파일을 액세스 할 수있었습니다. 사용자를 관리하기 위해 Yii와 MySQL이라는 PHP 프레임 워크를 사용하지만 사용자가 자신의 파일에만 액세스하고 다른 사용자는의 파일에 액세스하지 못하도록하고 싶습니다. 나는 htaccess를 사용하려고 생각하고 있지만 그 접근법은 다소 모호하다.웹 사이트 사용자 계정 디렉토리 액세스

당신은 어떤 아이디어 나 제안을 좀 ^^ 답변을 게시하시기 바랍니다 감사

이있는 경우

예 : 사용자 "마미"라는 이름의 폴더가 할 수없는 액세스 할 수 있어야합니다 "mamifolder" 하지만 사용자 "다디" " mamifolder ". 사용자 "다디"수 만 액세스 "dadifolder"나는 알고 있지만

솔루션의 주요 단점이있다 :이 일 이후 정말 나쁜 방법입니다 :

1) 데이터베이스의 모든 파일 (죄수를 저장하는 것입니다 PHP는 4, 그건 내가 생각하는 좋은 연습 아니에요)

2) 업로드 된 파일을 htaccess로 보호하고 php가 업로드 된 파일을 렌더링하게하는 것입니다. (단점 : 웹 앱을 매우 느리게 만드는 다른 나쁜 습관 로드합니다. 예를 들어 비공개 이미지는 PHP를 사용하여로드됩니다. 많은 비공개 이미지가있는 경우 같은 페이지에 동시에로드됩니다.)

답변

2

나는 당신의 유일한 옵션은 이동하는 것입니다 말할 것 공개 웹 디렉토리에서 파일을 열어 this과 같은 것을 사용하십시오. 전체 파일이 아닌 데이터베이스의 파일 ID 만 저장하면됩니다.

+0

을 업데이트하면 매우 느립니다. 동시에 같은 페이지에서 10 개 이상의 이미지를 렌더링 할 것입니다 .. –

+0

하지만 어떻게 지금로드 중입니까? 사진의 미리보기 이미지를로드 하시겠습니까? – Puigcerber

+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 으로 작성한 다음 예 manager 또는 reader에 대한 역할을 작성해야합니다. updateOwnHotel의 하위

응용 프로그램에서 작업을하고 당신은 단지 그가 업데이트 할 수 true 또는 false를 반환합니다 Yii::app()->checkAccess('updateOwnHotel',$prams) 여부를 당신이 당신의 경우와 유사 할 수있는 호텔을 할 필요가

+0

Yii의 RBAC는 권한 부여 항목을 기반으로합니다 ... 이는 내 컨트롤러 내에서 승인되지 않은 작업 만 억제하고 파일에 액세스하지 못하도록 할 수 있음을 의미합니다. –

+0

아니요'Roles','Tasks' 등을 정의해야합니다. ans –