CakePHP。 ACLコンポーネントなしでアクセスを共有します。

現時点では、CakePHPとMS SQLを使用してシステムを作成しています。 最初は標準のACLコンポーネントを使用しようとしましたが、CakePHPはMS SQLを完全にサポートしていないことがわかりました(少なくともこのコンポーネントでは)。 そのため、アクセスを共有する次の方法を考え出す必要がありました。



ユーザーを説明するUserモデルがあり、その中に管理者グループのメンバーシップを定義するis_adminフィールドがあると想定されています。 したがって、ゲスト、ユーザー、および管理者の3つのグループがあります。

このアプローチを実装するには、app_controller.phpにコードを追加する必要があります



<?php

クラスAppControllerはControllerを拡張します

{

関数beforeFilter()

{

$ allowedToUsers = isset($ this-> allowedToUsers)? $ this-> allowedToUsers:array();

$ allowedToGuests = isset($ this-> allowedToGuests)? $ this-> allowedToGuests:array();



$ group = $ this-> userGroup();



スイッチ($グループ)

{

ケース「ユーザー」:

if(!in_array($ this-> action、$ allowedToUsers))

{

$ this-> redirect( '/ pages / norights');

}

休憩;

ケース「ゲスト」:

if(!in_array($ this-> action、$ allowedToGuests))

{

$ this-> redirect( '/ users / login');

}

休憩;

}

}

関数userGroup()

{

$ user = $ this-> Session-> read( 'User');

$ ret = '';

if(empty($ user ['name']))

{

$ ret = 'guest';

}

else if(intval($ user ['is_admin'])== 1)

{

$ ret = 'admin';

}

他に

{

$ ret = 'user';

}

return $ ret;

}



}

?>



アプリケーションコントローラーの制限を確立するために残ります。 これを行うには、対応するグループへのアクセスを許可されているコントローラーアクションのリストを含む$ allowedToUsersおよび$ allowedToGuests配列を追加します(管理者はすべて許可されていると想定されます)。

クラスStudentControllerはAppControllerを拡張します{



var $ name = 'Students';

var $ helpers = array( 'Html'、 'Form'、 'Time');



var $ allowedToUsers = array( 'index'、 'view'、 'add'、 'edit'、 'delete');

var $ allowedToGuests = array();



できた



All Articles