Explorar o código

Add SecurityRolesType

Thomas Rabaix %!s(int64=14) %!d(string=hai) anos
pai
achega
cabb9e8395

+ 14 - 1
Admin/Entity/GroupAdmin.php

@@ -12,6 +12,10 @@
 namespace Sonata\UserBundle\Admin\Entity;
 
 use Sonata\AdminBundle\Admin\Admin;
+use Sonata\AdminBundle\Form\FormMapper;
+use Sonata\AdminBundle\Datagrid\DatagridMapper;
+use Sonata\AdminBundle\Datagrid\ListMapper;
+use Sonata\AdminBundle\Route\RouteCollection;
 
 class GroupAdmin extends Admin
 {
@@ -22,7 +26,6 @@ class GroupAdmin extends Admin
 
     protected $form = array(
         'name',
-//        'roles'
     );
 
     public function getNewInstance()
@@ -31,4 +34,14 @@ class GroupAdmin extends Admin
 
         return new $class('', array());
     }
+
+    public function configureFormFields(FormMapper $formMapper)
+    {
+        $formMapper->addType('roles', 'sonata_security_roles', array(
+            'multiple' => true,
+//            'expanded' => true,
+        ), array(
+            'type' => 'choice'
+        ));
+    }
 }

+ 15 - 2
Admin/Entity/UserAdmin.php

@@ -12,6 +12,10 @@
 namespace Sonata\UserBundle\Admin\Entity;
 
 use Sonata\AdminBundle\Admin\Admin;
+use Sonata\AdminBundle\Form\FormMapper;
+use Sonata\AdminBundle\Datagrid\DatagridMapper;
+use Sonata\AdminBundle\Datagrid\ListMapper;
+use Sonata\AdminBundle\Route\RouteCollection;
 
 class UserAdmin extends Admin
 {
@@ -28,7 +32,6 @@ class UserAdmin extends Admin
         'username',
         'email',
         'enabled',
-        'plainPassword' => array('type' => 'string'),
         'locked',
         'expired',
         'credentialsExpired',
@@ -44,7 +47,7 @@ class UserAdmin extends Admin
             'fields' => array('groups')
         ),
         'Management' => array(
-            'fields' => array('locked', 'expired', 'enabled', 'credentialsExpired', 'credentialsExpireAt')
+            'fields' => array('roles', 'locked', 'expired', 'enabled', 'credentialsExpired', 'credentialsExpireAt')
         )
     );
 
@@ -58,4 +61,14 @@ class UserAdmin extends Admin
         'email',
         'id',
     );
+
+    public function configureFormFields(FormMapper $formMapper)
+    {
+        $formMapper->addType('roles', 'sonata_security_roles', array(
+            'multiple' => true,
+//            'expanded' => true,
+        ), array(
+            'type' => 'choice'
+        ));
+    }
 }

+ 1 - 1
DependencyInjection/SonataUserExtension.php

@@ -27,7 +27,6 @@ class SonataUserExtension extends Extension
 {
 
     /**
-     * Loads the url shortener configuration.
      *
      * @param array            $config    An array of configuration settings
      * @param ContainerBuilder $container A ContainerBuilder instance
@@ -36,6 +35,7 @@ class SonataUserExtension extends Extension
     {
         $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
         $loader->load('admin_orm.xml');
+        $loader->load('form.xml');
     }
 
     /**

+ 5 - 0
Entity/BaseUser.php

@@ -24,6 +24,11 @@ class BaseUser extends AbstractedUser
         return $this->credentialsExpireAt;
     }
 
+    public function setCredentialsExpireAt(\DateTime $date = null)
+    {
+        $this->credentialsExpireAt = $date;
+    }
+
     public function __toString()
     {
         return $this->getUsername();

+ 46 - 0
Form/Type/SecurityRolesType.php

@@ -0,0 +1,46 @@
+<?php
+
+/*
+ * This file is part of the Sonata package.
+ *
+ * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ */
+
+namespace Sonata\UserBundle\Form\Type;
+
+use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
+
+class SecurityRolesType extends ChoiceType
+{
+    protected $rolesHierarchy = array();
+
+    public function __construct($container)
+    {
+        $this->rolesHierarchy = $container->getParameter('security.role_hierarchy.roles');
+    }
+
+    public function getDefaultOptions(array $options)
+    {
+        $options = parent::getDefaultOptions($options);
+
+        $roles = array();
+        if (count($options['choices']) == 0) {
+            foreach ($this->rolesHierarchy as $name => $rolesHierarchy) {
+                $roles[$name] = $name;
+                foreach ($rolesHierarchy as $role) {
+                    if (!isset($roles[$role])) {
+                        $roles[$role] = ' -- '.$role;
+                    }
+                }
+            }
+
+            $options['choices'] = $roles;
+        }
+
+        return $options;
+    }
+}

+ 1 - 1
Resources/config/doctrine/Sonata.UserBundle.Entity.BaseGroup.orm.xml

@@ -4,7 +4,7 @@
                   xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                   http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
 
-    <mapped-superclass name="Sonata\UserBundle\Entity\Group">
+    <mapped-superclass name="Sonata\UserBundle\Entity\BaseGroup">
 
 
     </mapped-superclass>

+ 1 - 1
Resources/config/doctrine/Sonata.UserBundle.Entity.BaseUser.orm.xml

@@ -4,7 +4,7 @@
                   xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                   http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
 
-    <mapped-superclass name="Sonata\UserBundle\Entity\User">
+    <mapped-superclass name="Sonata\UserBundle\Entity\BaseUser">
 
     </mapped-superclass>
 

+ 13 - 0
Resources/config/form.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<container xmlns="http://symfony.com/schema/dic/services"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
+
+    <services>
+        <service id="sonata.user.form.type.security_roles" class="Sonata\UserBundle\Form\Type\SecurityRolesType">
+            <tag name="form.type" alias="sonata_security_roles" />
+            <argument type="service" id="service_container" />
+        </service>
+    </services>
+
+</container>

+ 1 - 2
SonataUserBundle.php

@@ -12,7 +12,6 @@ namespace Sonata\UserBundle;
 
 use Symfony\Component\HttpKernel\Bundle\Bundle;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Sonata\PageBundle\DependencyInjection\AddBlockServicePass;
 
 class SonataUserBundle extends Bundle
 {
@@ -23,4 +22,4 @@ class SonataUserBundle extends Bundle
     {
         return 'FOSUserBundle';
     }
-}
+}