3

カスタム フレームワークのアクセス制御の実装に苦労しています。

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 リクエストを使用しません

...そして、リソースをユーザー グループに割り当てる代わりに、リソース グループをユーザー グループに割り当てます。

とても複雑に感じます。これは正しい方法ですか?何を改善できますか?この問題に対処するフレームワークはありますか?

4

4 に答える 4

2

依存する xhr リソースの配列を格納するという新しい列をresourcesテーブルに追加しないのはなぜですか? descendantsしたがって、次のようになります。

resource: "invoices/list"
descendants: ["invoices/xhr_get_total_amount"]

resource: "orders/list"
descendants: ["orders/xhr_get_positons_for_order","orders/xhr_get_some_other_data"]

resource: "users/new"
descendants: []

また、まだ実装されていない場合: リクエストの開始時に、許可されたリソースとその子孫のリスト全体を単一の配列に取得して処理し、応答まで保存することができます。したがって、何かアクセスを確認する必要があるたびにデータベースに問い合わせることはありません。

于 2013-05-25T19:39:24.087 に答える
1

* ではなく、ファイルを要求しているドメインを使用することをお勧めします。* は、IE の一部のバージョンでは失敗します (どのバージョンか覚えていないでください)。

if ($ref_url)
  header("Access-Control-Allow-Origin:"+$ref_url);
else
  header("Access-Control-Allow-Origin:*");
于 2013-05-25T15:55:35.217 に答える
1

あなたの質問に直接答えているわけではないことは承知していますが、Web サイトのサイズと複雑さが増したら、より柔軟になる、少し異なる方法であなたを紹介できるかもしれません。この投稿を読んだ後、認証システムをアクティビティ ベース (アクティビティ "doSomething" を許可) に切り替え、ロール ベース ("管理者" は次の操作を実行できます....) から切り離しました。

ちょっとした考え。

于 2013-05-23T01:57:30.000 に答える