2012-03-16 1 views
2

この問題は本当に珍しいことではありませんが、私はこれをどのように実装できるのか考えていません。 私はミニフォーラムに500人の登録ユーザーがいて、私のサーバーにファイルがアップロードされています。 ユーザーはすでに自分のWebサーバーで自分のディレクトリ構造をマップしているので、自分が所有していないユーザーであっても、登録したユーザーのファイルにアクセスできました。 私はYiiとMySQLというPHPフレームワークを使ってユーザを管理していますが、私は自分のファイルにアクセスし、他の人のファイルにはアクセスさせたくありません。私はhtaccessを使うことを考えていますが、そのアプローチはやや不明です。ウェブサイトユーザーアカウントのディレクトリアクセス

あなたは、任意のアイデアや提案ちょっと^^答えを投稿してください 感謝

をお持ちの場合は

例: ユーザー「マミは」という名前のフォルダを持っていることができませんアクセスする必要があります「mamifolder」 が、ユーザー「DADI」」 mamifolder "と呼ばれる。ユーザー「DADI」私が知っている

ソリューション「dadifolder」のみのアクセスをすることができますが、主要な短所があります)

1は、データベース(短所内のすべてのファイルを格納することです:これは日以来、本当に悪い習慣ですPHP 4のそれは実際に私が考える良い練習ではありません)

2)アップロードされたファイルをhtaccessで保護し、PHPにアップロードされたファイルをレンダリングさせることです(短所:Webアプリケーションを非常に遅くする別の悪い習慣例えばプライベートイメージは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"); 

のために1

最高のでしょうか? 操作updateHotelを作成し、パラメータを取るビジネスルールを作成して実行するタスクを作成します(例:updateOwnHotel )。managerまたはreaderのロールを作成する必要があります。 updateOwnHotelの子。

アプリケーションで操作を行っているあなたはちょうど彼が更新できるというのは本当かfalseを返しますYii::app()->checkAccess('updateOwnHotel',$prams)かどうか、あなたのケースに似て行うことができたホテルを行う必要があり

+0

YiiのRBACは承認項目に基づいています。これは、私がコントローラ内での不正な操作を抑止でき、ファイルにアクセスできないことを意味します。 –

+0

いいえあなたは 'Roles'、' Tasks'を定義しなければなりません。このような更新はans –

関連する問題