6

Symfony と「スーパー管理者」について何か理解しようとしています。

FOSUser を使用してスーパー管理者権限を持つユーザーを作成する場合

php app/console fos:user:create adminuser --super-admin

まず、その意味を知りたいです(ドキュメントから)

[...] --super-admin オプションを指定すると、ユーザーにスーパー管理者としてフラグが立てられます[...]

ROLE_SUPER_ADMINユーザーテーブルにスーパー管理者フィールドが表示されないため、ユーザーに付与することを意味すると思います。

第二に、ながら(まだドキュメントから)

スーパー管理者はアプリケーションのどの部分にもアクセスできます

security:
    role_hierarchy:
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ...]

アクセス階層を設定する必要があるのはなぜですか?

4

2 に答える 2

6

FOSUserBundle のコードを見ると、フラグを指定してCreateUserCommandを呼び出すと、ブール値の引数でUserManipulatorが呼び出されることがわかります。--super-admin$superadmin=true

UserManipulator はUserManagerを呼び出します。UserManager はユーザー オブジェクトを作成し、そのsetSuperAdmin()メソッドを呼び出して、その後新しいユーザーを永続化します。

メソッドは次のようになります。

public function setSuperAdmin($boolean)
{
    if (true === $boolean) {
        $this->addRole(static::ROLE_SUPER_ADMIN);
    } else {
        $this->removeRole(static::ROLE_SUPER_ADMIN);
    }

    return $this;
}

だからあなたの最初の質問に答えます:

はい--super-adminフラグにより​​、ロールFOSUserBundleを持つ新しいユーザーが作成されます。ROLE_SUPER_ADMIN

ROLE_SUPER_ADMINロールは基本的に他のロールと変わらないため、セキュリティ構成にロール階層を含める必要があります。

これは、Symfony の標準版が提供する、ロールを持つユーザーにアクセス制限を課してはならない慣例にすぎません。 ROLE_SUPER_ADMIN

デフォルトですべてのセキュリティ ボーターをバイパスする場合は、特別なロールにこれを実装するROLE_SUPER_ADMINJMSSecurityExtraBundle を参照してください。しかし、これはあなたの他の質問hereですでに提案されています。IddqdVoterROLE_IDDQD

于 2013-10-30T09:54:36.820 に答える
1

階層を定義することにより、ROLE_ADMIN および ROLE_ALLOWED_TO_SWITCH ロール (またはその他のカスタム ロール) を明示的に付与します。

この行にコメントを付けて、ROLE_SUPER_ADMIN ユーザーで ROLE_ADMIN チェックのあるアクションにアクセスしようとすると、許可されていないエラーが発生します。

ROLE_SUPER_ADMIN は、スーパー管理者ロールが持つべき名前の規則にすぎませんが、それ自体には権限がないため、明示的に付与する必要があります。

于 2013-10-30T10:00:07.650 に答える