カスタム フレームワークのアクセス制御の実装に苦労しています。
RBAC の細分性は必要ないので、リソースがコントローラー アクションになるある種の ACL を使用することにしました。
データベース構造は次のとおりです。
ユーザー:
- ジョン
- メアリー
- グレッグ
ユーザーグループ:
- 管理者
- 会計士
- マネージャー
users_to_user_groups:
- ジョン => 管理者
- メアリー => 会計士
- グレッグ => マネージャー
リソース (コントローラー アクション):
- ユーザー/編集
- 請求書/追加
- 顧客/削除
resources_to_user_groups:
- ユーザー/編集 => 管理者
- 請求書/追加 => 会計士
- 顧客/削除 => マネージャー
そして、これが[疑似]コードです。
$user = new User; // This will be currently logged in user ...
$acl = new Acl($user);
$dispatcher = new Dispatcher($acl);
$dispatcher->dispatch('users', 'new');
class Dispatcher
{
public function dispatch($controller, $action)
{
$permission = $controller . '/' . $action;
if(!$this->acl->isAllowed($permission))
{
throw new AccessDeniedException("Access denied");
}
// User is authorized to execute this action, dispatch ...
}
}
私はこのアプローチが好きでした... XHRリクエストもたくさんあることに気付くまで。
たとえば、請求書リストは XHR リクエストを使用して合計金額を取得し、注文リストは XHR リクエストを使用して注文ポジションやその他のデータをロードします。
そのため、新しいテーブル resource_groups など、リソースのグループ化が必要です。
- 請求書一覧 (invoices/list、invoices/xhr_get_total_amount)
- 注文リスト (orders/list、orders/xhr_get_positons_for_order、orders/xhr_get_some_other_data)
- 新規ユーザーの追加 (users/new) # シングル アクション、新規ユーザー入力フォームは XHR リクエストを使用しません
...そして、リソースをユーザー グループに割り当てる代わりに、リソース グループをユーザー グループに割り当てます。
とても複雑に感じます。これは正しい方法ですか?何を改善できますか?この問題に対処するフレームワークはありますか?