kevinsentjens/role-right-bundle

角色权限系统的 Symfony 实现。

v1.2 2021-03-22 13:54 UTC

This package is auto-updated.

Last update: 2024-09-22 21:56:30 UTC


README

这是一个简单的 Symfony 角色/权限系统实现。该包提供了创建和管理角色和权限的结构。

该包包含以下内容

  • 3 个实体 User, KSRole, KSRight
  • 3 个存储库 UserRepository, KSRoleRepository, KSRightRepository
  • 一个 bin/console 命令,用于将实体和存储库放置在 src 文件夹中
  • 用于处理 KSRoleKSRight 检查的 Twig 函数

该包不包含

此包**不**提供控制器或视图。它仅提供功能。我可能在将来包含它。

注意

我创建此包是为了自己使用。然而,我决定将其公开。如果您有任何建议,可以通过以下电子邮件联系我:kevinsentjens.dev@gmail.com

此包使用 Symfony 安全组件。没有它,此系统**无法**工作。

您仍然可以使用来自 Symfony 安全组件access_control。例如,假设您有一个后端系统,您只想让具有特定角色/权限的人访问。然而,普通用户没有登录。您可以这样做

access_control:
        - { path: ^/backend/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/backend/*, roles: ROLE_USER }

来自 Symfony 安全组件User 实体给所有已登录用户赋予角色 ROLE_USER

您还可以使用自己的用户类。只需用您的类替换我提供的类,只要它仍然是名为 User 的类即可(不要忘记将 KSRightUser 重新链接)。

安装

您安装包之前,创建一个配置文件 config/packages/ks_role_right.yaml

ks_role_right:
    app_directory: '%kernel.project_dir%'

使用以下命令安装包

composer require kevinsentjens/role-right-bundle

设置系统的必要文件

php bin/console ks:set-files

创建迁移

php bin/console make:migration

用法

控制器

在控制器中检查特定的 KSRight

public function __construct(KSRoleRight $ksRoleRight)
{
    if (!$ksRoleRight->hasKSRight('manage-users'))
    {
        throw $this->createAccessDeniedException('You don\'t have the required permissions.');
    }
}

您可以在控制器的 __construct() 中这样做,使其适用于每个路由,或者您可以在单个函数中使用它。KSRole 的工作方式完全相同。只需将

if (!$ksRoleRight->hasKSRight('manage-users'))

替换为

if (!$ksRoleRight->hasKSRole('SUPER_ADMIN'))

Twig 视图

此包提供 2 个 Twig Functions 和 1 个 Twig filter

要检查 KSRight,您可以使用函数 has_right('权限名称')

要检查 KSRole,您可以使用函数 has_role('角色名称')

要检查 KSRole 是否具有 KSRight,您可以使用过滤器 KSRole 对象|roleHasRight('权限名称')

许可证

此包是免费软件,根据 MIT 许可证 的条款分发。

未来想法

  • 创建一个注解用于在控制器中使用,而不是使用 KSRoleRight->hasRight('权限名称')
  • 申请为 Symfony 食谱
  • 提供控制器和视图

更新

  • 2021 年 3 月 22 日
    • 修改了 composer.json。现在,此包可用于任何 Symfony 5.* 包(以后可能会更改)。
    • 包现在是公开的。
  • 2021 年 2 月 6 日
    • 添加了方法 getCurrentUser(),因此您不再需要使用 security->getUser()
  • 2021 年 2 月 5 日
    • hasKSRole()hasKSRight() 进行了内部更改。
    • 已移除私有函数 getUserByEmail()。此函数不再使用。
  • 2021年2月4日
    • KSRoleRight 类中添加了按名称获取 KSRoleKSRight 的方法。
    • KSRoleRight 类中添加了按 ID 获取 KSRoleKSRight 的方法。
    • 更新了 ReadMe 文件。