1

ユーザーがログインして、URLを使用して会社のプロジェクトを表示できるログインのようなベースキャンプを作成しようとしています: http://abc.com/companyname/

2 レベルの認証を作成する方法がわかりません... (1 つは会社レベルで、もう 1 つはユーザー レベルです) CakePHP を初めて使用するので、組み込みの Auth コンポーネントを自分の要件に合わせて変更する方法がわかりません。感謝します...

4

2 に答える 2

1

正直なところ、ACLコンポーネントをチェックする必要があると思います。本のチュートリアルは、それに従うと非常に優れています。主な注意点は、行レベルのアクセス制御のメカニズムが提供されていないことです(たとえば、ユーザーXがこの特定のエントリを編集できます)。ただし、ユーザー/グループレベルのアクセス制御を行うための基礎を提供します。これにより、必要な行レベルのアクセスを作成するために自分自身を拡張できます。

つまり、ACLコンポーネントはカスケードアクセス許可をサポートします(たとえば、サブグループはきめ細かいアクセス制御を持つことができますが、それ以外の場合は親グループからアクセス許可を継承します)。堅牢性と粒度の両方が必要な場合は、これにより作業が大幅に楽になります。

コミュニティによって作成された追加の認証コンポーネントがあり、必要なものを提供する可能性があるため、パン屋をチェックすることもできます。Auth / ACLをうまく実行するのは難しく、Webアプリでは常に大きな懸念事項であるため、強くお勧めします。

于 2010-01-04T21:53:53.693 に答える
1

ログインにはAuthコンポーネントを使用します。私が見つけたのはかなり混乱しているので、ACLなどをいじることはありません。

これにアプローチするには、usersテーブルにuser_level、access_level、またはpermissions列を追加します。次に、ここに数値などを保存できます。

次に、ユーザーモデルでは、Authを使用してログインすると、その値をAuthユーザーセッションオブジェクトに保存できます。したがって、コントローラーで$ this-> Auth('User.access_level')を使用して取得できます。

現在、Authコンポーネントには、デフォルトでapp_controllerにisAuthorized()関数があります。この関数は、誰かがログインしたかどうかを確認するために呼び出されます。これを変更して、access_levelを確認し、適切にアクションを実行できます。admin = 1でない限り、ユーザーが/ cmsルーティングに入らないように、この手法を使用しました。

これに関する詳細は、ドキュメントhttp://book.cakephp.org/view/172/Authenticationにあり、isAuthorized()の詳細については、http: //api.cakephp.org/class/authを参照してください。 -component#method-AuthComponentisAuthorized

app_controllerですべてのAuthコンポーネント変数を設定していることを確認してください。また、認証タイプがコントローラーに設定されていること、およびallow()とdeny()が正しく構成されていることを確認してください。

これらすべての大きな問題の1つは、コントローラーでbeforeFilter()を使用する場合は、必ずparent :: beforeFilter()を実行して、app_controllerの内容が事前に実行されるようにする必要があることです:)

于 2010-01-04T10:25:56.910 に答える