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();

できた

Source: https://habr.com/ru/post/J20259/


All Articles