cooolinho/symfony-security-bundle 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

cooolinho/symfony-security-bundle

Composer 安装命令:

composer require cooolinho/symfony-security-bundle

包简介

test reusable bundle

README 文档

README

Setup

Install via composer

composer install cooolinho/symfony-security-bundle

update .env

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

update security.yml

add to encoders

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

use in provider

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

update firewall

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

add role hierarchy

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

add access control

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

add cooolinho_security.yaml to 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

ResetPassword Setup

First you have to create two classes: App\Entity\ResetPasswordRequest and 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);
    }
}

update reset_password.yaml in config/packages

symfonycasts_reset_password:
    request_password_repository: App\Repository\ResetPasswordRequestRepository

update config/routes/annotations.yaml

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

cooolinho/symfony-security-bundle 适用场景与选型建议

cooolinho/symfony-security-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 88 次下载、GitHub Stars 达 1, 最近一次更新时间为 2021 年 03 月 17 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 cooolinho/symfony-security-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 cooolinho/symfony-security-bundle 我们能提供哪些服务?
定制开发 / 二次开发

基于 cooolinho/symfony-security-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 88
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: GPL-2.0-only
  • 更新时间: 2021-03-17