Access Controll List
出典: SugarForum.jp
目次 |
ACLとは?
モジュールをACL(Access Controll List)に対応させると、ユーザの行動についてアクション毎に制限をかけることができます。つまり、閲覧・削除・編集、といったことを人によって許可・あるいは禁止することが可能です。 使いどころとしては、例えば、アルバイトと職員で「役割」を分けて、アルバイトのアクセスを制限するといったことが考えられます。
例
アルバイトの情報持ち出しを抑止するためエクスポートを制限し、管理職用のモジュールに一般職員がアクセス出来ないようにして、開発者以外がインポートを使えないようにする。
- 役割「アルバイト」: 全てのモジュールの削除・エクスポート・インポート権限と、管理職用モジュールへのアクセス権限を「なし」にする。
- 役割「職員」: 全てのモジュールのインポート権限と、管理職用モジュールへのアクセス権限を「なし」にする。
- 役割「管理職」: 全てのモジュールのインポート権限を「なし」にする。
- 役割「開発者」: アクセス制限なし
モジュールをACLに対応させる
あなたの作ったモジュールのSugarBeanファイルで、bean_implements関数を下記のようにオーバーライドします。
function bean_implements($interface){
switch($interface){
case 'ACL':return true;
}
return false;
}
もし、モジュールローダを使わずに作業している場合(開発中はそうだと思います)、ブラウザから次の呼び出しを実行します。
index.php?module=ACL&action=install_actions
この操作で、ACLが「リセット」され、あなたの新しいモジュールに正しいパーミッションが設定されるはずです。これをやらないと、管理者以外のユーザからモジュールにアクセスできなかったりということが起きます。モジュールを初めて作成する場合、はまりやすい部分ですので注意しましょう。
特定のアクションや表示を制限する
ある意味、原始的な方法をとります。
if(ACLController::checkAccess('<モジュール名>', '<アクション名>', true)){
//ここで処理を実行したり、出力を行ったりします。
}
例えば、メニュー表示をACLで制御するには、
if(ACLController::checkAccess('YourModule', 'list', true))
$module_menu[]=Array("index.php?module=YourModule&action=ListView", $mod_strings['LNK_YOURMODULE_LIST'],"YourModuleIcon");
などとします。上記の例は、「YourModuleに対してlistアクションが許可されていれば、メニュー項目にListViewへのリンクを追加する」と読めます。
ユーザのアクセス権を設定する
管理者アカウントでログインします。
役割設定
「管理」から「役割管理」に進みます。「役割作成」を選び、分かりやすい名称を付けて保存します。詳細画面にて、制限したい権限のところでクリック、プルダウンメニューから「なし」を選び、「保存」ボタンをクリックします。
ユーザの割付け
ユーザの詳細画面のサブパネルで、役割を選択します。あるいは役割の詳細画面のサブパネルで、ユーザを選択します。大勢を登録する場合は後者の方が楽ですが、意味はどちらも同じです。