halloverden/symfony-security-bundle

halloverden/symfony-security 的 Bundle

3.1.0 2022-06-28 12:58 UTC

README

安装

确保全局已安装 Composer,如 Composer 文档的《安装》章节中所述。

使用 Symfony Flex 的应用程序

打开命令行,进入您的项目目录并执行

$ composer require halloverden/symfony-security-bundle

不使用 Symfony Flex 的应用程序

步骤 1: 下载 Bundle

打开命令行,进入您的项目目录并执行以下命令以下载此 Bundle 的最新稳定版本

$ composer require alloverden/symfony-security-bundle

步骤 2: 启用 Bundle

然后,通过将其添加到项目中 config/bundles.php 文件中已注册的 Bundle 列表中来启用 Bundle

// config/bundles.php

return [
    // ...
    HalloVerden\SecurityBundle\HalloVerdenSecurityBundle::class => ['all' => true],
];

身份验证器

可以使用身份验证器通过您的 OpenID 提供者的访问令牌进行身份验证。

  1. 创建一个实现 HalloVerden\Security\Interfaces\OauthUserProviderServiceInterface 的类
  2. 启用身份验证器和您希望用作服务的类
      HalloVerden\Security\Interfaces\OauthUserProviderServiceInterface:
        class: App\Services\OauthUserProviderService # Your class
    
      HalloVerden\Security\AccessTokenAuthenticator: ~
      HalloVerden\Security\ClientCredentialsAccessTokenAuthenticator: ~
  3. 将身份验证器添加到您的安全配置中。
      guard:
        authenticators:
          - HalloVerden\Security\AccessTokenAuthenticator
        entry_point: HalloVerden\Security\AccessTokenAuthenticator
  4. 您还需要实现 HalloVerden\Security\Interfaces\OauthTokenProviderServiceInterfaceHalloVerden\Security\Interfaces\OauthJwkSetProviderServiceInterface 的服务(使用 halloverden/symfony-oidc-client-bundle 时可以跳过)

访问定义

为需要访问定义的每个实体创建一个 yaml 文件。示例

App\Entity\Requests\TestRequest:
    canCreate:
        roles:
            - 'ROLE_ADMIN'
        scopes:
            - 'system.create:test-request'
    canRead:
        roles:
            - 'ROLE_ADMIN'
        scopes:
            - 'system.read:test-request'
    canUpdate:
        roles:
            - 'ROLE_ADMIN'
        scopes:
            - 'system.update:test-request'
    canDelete:
        roles:
            - 'ROLE_ADMIN'
        scopes:
            - 'system.delete:test-request'
    properties:
        test:
            canRead:
                roles:
                    - 'ROLE_USER'
                scopes:
                    - 'system.read:test-request.test'
            canWrite:
                roles:
                    - 'ROLE_USER'
                scopes:
                    - 'system.write:test-request.test'
        yoo:
            canWrite:
                roles:
                    - 'ROLE_USER'

将此访问定义的路径添加到配置文件中

hallo_verden_security:
  access_definitions:
    dirs:
      App\Entity\Requests: '%kernel.project_dir%/config/access_definitions/requests'

您可以使用 AccessDefinableExclusionStrategy 跳过序列化和反序列化时用户没有访问权限的属性。

还有一个 HasAccess 验证约束,可以检查用户是否可以访问特定属性。

在其他情况下,您可以使用 AccessDefinitionService 来检查特定类/属性的访问权限。