Browse Source

se agrego como entidad a oauth user

Guillermo Espinoza 8 years ago
parent
commit
d35063f7c2

+ 0 - 3
Entity/AccessToken.php

@@ -24,9 +24,6 @@ class AccessToken extends BaseAccessToken
      */
     protected $client;
 
-    /**
-     * @ORM\ManyToOne(targetEntity="Base\UserBundle\Entity\User")
-     */
     protected $user;
 
 }

+ 0 - 3
Entity/AuthCode.php

@@ -24,9 +24,6 @@ class AuthCode extends BaseAuthCode
      */
     protected $client;
 
-    /**
-     * @ORM\ManyToOne(targetEntity="Base\UserBundle\Entity\User")
-     */
     protected $user;
 
 }

+ 0 - 3
Entity/RefreshToken.php

@@ -24,9 +24,6 @@ class RefreshToken extends BaseRefreshToken
      */
     protected $client;
 
-    /**
-     * @ORM\ManyToOne(targetEntity="Base\UserBundle\Entity\User")
-     */
     protected $user;
 
 }

+ 72 - 0
EventListener/DynamicRelationSubscriber.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace Base\OAuthBundle\EventListener;
+
+use Doctrine\ORM\Events;
+use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
+use Doctrine\Common\EventSubscriber;
+
+class DynamicRelationSubscriber implements EventSubscriber
+{
+    /**
+     * {@inheritDoc}
+     */
+    public function getSubscribedEvents()
+    {
+        return array(
+            Events::loadClassMetadata,
+        );
+    }
+
+    /**
+     * @param LoadClassMetadataEventArgs $eventArgs
+     */
+    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
+    {
+        // the $metadata is the whole mapping info for this class
+        $metadata = $eventArgs->getClassMetadata();
+        $classes = array(
+            'Base\OAuthBundle\Entity\AccessToken',
+            'Base\OAuthBundle\Entity\AuthCode',
+            'Base\OAuthBundle\Entity\RefreshToken'
+        );
+        
+        if (!in_array($metadata->getName(), $classes)) {
+            return;
+        }
+
+        $namingStrategy = $eventArgs
+            ->getEntityManager()
+            ->getConfiguration()
+            ->getNamingStrategy()
+        ;
+        
+        $userClass = 'Base\UserBundle\Entity\User';
+        $OAuthUserClass = '\Base\OAuthBundle\Security\Core\User\CustomOAuthUser';
+        
+        $metadata->mapManyToMany(array(
+            'targetEntity'  => class_exists($userClass) ? $userClass : $OAuthUserClass,
+            'fieldName'     => 'user',
+            'cascade'       => array('persist'),
+            'joinTable'     => array(
+                'name'        => strtolower($namingStrategy->classToTableName($metadata->getName())) . '_user',
+                'joinColumns' => array(
+                    array(
+                        'name'                  => $namingStrategy->joinKeyColumnName($metadata->getName()),
+                        'referencedColumnName'  => $namingStrategy->referenceColumnName(),
+                        'onDelete'  => 'CASCADE',
+                        'onUpdate'  => 'CASCADE',
+                    ),
+                ),
+                'inverseJoinColumns'    => array(
+                    array(
+                        'name'                  => 'user_id',
+                        'referencedColumnName'  => $namingStrategy->referenceColumnName(),
+                        'onDelete'  => 'CASCADE',
+                        'onUpdate'  => 'CASCADE',
+                    ),
+                )
+            )
+        ));
+    }
+}

+ 12 - 1
Resources/config/hwioauthbundle/config.yml

@@ -16,4 +16,15 @@ hwi_oauth:
                 firstname: firstname
                 lastname: lastname
                 roles: roles
-    firewall_names: [secured_area]
+    firewall_names: [secured_area]
+
+doctrine:
+    orm:
+        entity_managers:
+            default:
+                mappings:
+                    custom_mapping:
+                        type: annotation
+                        prefix: Base\OAuthBundle\Security\Core\User\
+                        dir: "%kernel.root_dir%/../vendor/base-oauth-bundle/Security/Core/User/"
+                        is_bundle: false

+ 5 - 1
Resources/config/services.yml

@@ -1 +1,5 @@
-services:
+services:
+    oauth.user.mapping.listener:
+        class: Base\OAuthBundle\EventListener\DynamicRelationSubscriber
+        tags:
+            - { name: doctrine.event_listener, event: loadClassMetadata }

+ 20 - 0
Security/Core/User/CustomOAuthUser.php

@@ -3,15 +3,35 @@
 namespace Base\OAuthBundle\Security\Core\User;
 
 use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUser;
+use Doctrine\ORM\Mapping as ORM;
 
+/**
+ * @ORM\Entity
+ */
 class CustomOAuthUser extends OAuthUser
 {
+    
+    /**
+     * @ORM\Id
+     * @ORM\Column(type="integer")
+     * @ORM\GeneratedValue(strategy="AUTO")
+     */
+    protected $id;
 
     /**
      * @var array
      */
     protected $roles = array('ROLE_USER');
 
+    
+    /**
+     * @return int
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
     /**
      * {@inheritdoc}
      */