cooolinho / symfony-security-bundle

测试可重用包

安装: 88

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

5.4.1 2022-02-12 12:03 UTC

README

设置

通过Composer安装

composer install cooolinho/symfony-security-bundle

更新.env

MAILER_DSN=smtp://user:pass@smtp.example.com:port

更新security.yml

添加到编码器

security:
    encoders:
        ...
        Cooolinho\Bundle\SecurityBundle\Entity\User:
            algorithm: auto

在提供者中使用

security:
    providers:
        ...
        my_custom_provider:
            entity:
                class: Cooolinho\Bundle\SecurityBundle\Entity\User
                property: email | username

更新防火墙

security:
    firewalls:
        ...
        secured_admin_area:
            provider: my_custom_provider
            user_checker: Cooolinho\Bundle\SecurityBundle\Security\UserChecker
            custom_authenticator:
                - Cooolinho\Bundle\SecurityBundle\Security\SecurityAuthenticator
            logout:
                path: app_logout
                target: app_login

添加角色层级

role_hierarchy:
    ROLE_SUPER_ADMIN: [ ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
    ROLE_ADMIN: ROLE_USER

添加访问控制

access_control:
    - { path: ^/login, roles: PUBLIC_ACCESS }
    - { path: ^/logout, roles: PUBLIC_ACCESS }
    - { path: ^/admin, roles: ROLE_ADMIN }

将cooolinho_security.yaml添加到config/packages

cooolinho_security:
    route_after_login: # REQUIRED
    user_class: # REQUIRED
    registration_enabled: false # optional
    route_login: app_login # optional
    route_logout: app_logout # optional
    mailer_from: test@localhost # optional
    mailer_name: Localhost Mailbot # optional
    login_provider_property: email # optional

重置密码设置

首先,您需要创建两个类:App\Entity\ResetPasswordRequest和App\Repository\ResetPasswordRequestRepository

App\Entity\ResetPasswordRequest

<?php

namespace App\Entity;

use App\Repository\ResetPasswordRequestRepository;
use Doctrine\ORM\Mapping as ORM;
use SymfonyCasts\Bundle\ResetPassword\Model\ResetPasswordRequestInterface;
use SymfonyCasts\Bundle\ResetPassword\Model\ResetPasswordRequestTrait;

/**
 * @ORM\Entity(repositoryClass=ResetPasswordRequestRepository::class)
 * @ORM\Table(name="users_reset_password_requests")
 */
class ResetPasswordRequest implements ResetPasswordRequestInterface
{
    use ResetPasswordRequestTrait;

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private ?int $id;

    /**
     * @ORM\ManyToOne(targetEntity=User::class)
     * @ORM\JoinColumn(nullable=false)
     */
    private object $user;

    public function __construct(object $user, \DateTimeInterface $expiresAt, string $selector, string $hashedToken)
    {
        $this->user = $user;
        $this->initialize($expiresAt, $selector, $hashedToken);
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getUser(): object
    {
        return $this->user;
    }
}

App\Repository\ResetPasswordRequestRepository

<?php

namespace App\Repository;

use App\Entity\ResetPasswordRequest;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use SymfonyCasts\Bundle\ResetPassword\Model\ResetPasswordRequestInterface;
use SymfonyCasts\Bundle\ResetPassword\Persistence\Repository\ResetPasswordRequestRepositoryTrait;
use SymfonyCasts\Bundle\ResetPassword\Persistence\ResetPasswordRequestRepositoryInterface;

/**
 * @method ResetPasswordRequest|null find($id, $lockMode = null, $lockVersion = null)
 * @method ResetPasswordRequest|null findOneBy(array $criteria, array $orderBy = null)
 * @method ResetPasswordRequest[]    findAll()
 * @method ResetPasswordRequest[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class ResetPasswordRequestRepository extends ServiceEntityRepository implements ResetPasswordRequestRepositoryInterface
{
    use ResetPasswordRequestRepositoryTrait;

    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, ResetPasswordRequest::class);
    }

    public function createResetPasswordRequest(object $user, \DateTimeInterface $expiresAt, string $selector, string $hashedToken): ResetPasswordRequestInterface
    {
        return new ResetPasswordRequest($user, $expiresAt, $selector, $hashedToken);
    }
}

在config/packages中更新reset_password.yaml

symfonycasts_reset_password:
    request_password_repository: App\Repository\ResetPasswordRequestRepository

更新config/routes/annotations.yaml

cooolinho_security:
    resource: ../../vendor/cooolinho/symfony-security-bundle/src/Controller/
    type: annotation