gpt4 book ai didi

symfony - 以奏鸣曲管理员的编辑形式为用户设置角色

转载 作者:行者123 更新时间:2023-12-03 18:09:08 25 4
gpt4 key购买 nike

我在一个项目中使用 Symfony 2.1。我使用 FOSUserBundle 来管理用户,使用 SonataAdminBundle 进行管理。

我对此有一些疑问:

  • 作为管理员,我想在用户编辑表单中设置用户的角色。我如何才能访问 role_hierarchy 中的角色?我如何将它们用作选择字段,以便管理员可以为用户设置角色?
  • 当我在列表中显示角色时,它显示为这样的字符串:
    [0 => ROLE_SUPER_ADMIN] [1 => ROLE_USER] 

    我怎样才能把它改成这个?
    ROLE_SUPER_ADMIN, ROLE_USER 

    我的意思是,只有数组的值。
  • 最佳答案

    根据@parisssss 的回答,虽然它是错误的,但这是一个可行的解决方案。如果您保存一个角色,Sonata 输入字段将显示给定角色下的所有角色。

    另一方面,在数据库中只会存储最重要的角色。但这在 Sf 方式中绝对有意义。

    protected function configureFormFields(FormMapper $formMapper) {
    // ..
    $container = $this->getConfigurationPool()->getContainer();
    $roles = $container->getParameter('security.role_hierarchy.roles');

    $rolesChoices = self::flattenRoles($roles);

    $formMapper
    //...
    ->add('roles', 'choice', array(
    'choices' => $rolesChoices,
    'multiple' => true
    )
    );

    而在另一种方法中:
    /**
    * Turns the role's array keys into string <ROLES_NAME> keys.
    * @todo Move to convenience or make it recursive ? ;-)
    */
    protected static function flattenRoles($rolesHierarchy)
    {
    $flatRoles = array();
    foreach($rolesHierarchy as $roles) {

    if(empty($roles)) {
    continue;
    }

    foreach($roles as $role) {
    if(!isset($flatRoles[$role])) {
    $flatRoles[$role] = $role;
    }
    }
    }

    return $flatRoles;
    }

    看看它在行动:

    enter image description here
    enter image description here

    关于symfony - 以奏鸣曲管理员的编辑形式为用户设置角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050576/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com