Parcourir la source

Subject construct: expect identity instead of identity id

Fabian Peter Hammerle il y a 8 ans
Parent
commit
658639c376
3 fichiers modifiés avec 29 ajouts et 9 suppressions
  1. 10 3
      Subject.php
  2. 13 0
      migrations/CreateSubjectTable.php
  3. 6 6
      tests/SubjectTest.php

+ 10 - 3
Subject.php

@@ -9,9 +9,13 @@ class Subject extends \yii\db\ActiveRecord
         return 'identity_cert_subject';
     }
 
-    public function __construct($identity_id = null, $dn = null)
+    public function __construct(\yii\web\IdentityInterface $identity = null, $dn = null)
     {
-        $this->identity_id = $identity_id;
+        if($identity !== null) {
+            $this->identity_id = $identity->getId();
+        } else {
+            $this->identity_id = null;
+        }
         $this->distinguished_name = $dn;
     }
 
@@ -55,6 +59,9 @@ class Subject extends \yii\db\ActiveRecord
 
     // public function getIdentity()
     // {
-    //     return $this->hasOne(self::getIdentityClass(), ['id' => 'identity_id']);
+    //     return $this->hasOne(
+    //         self::getIdentityClass(),
+    //         [Subject::getIdentityIdSchema()->name => 'identity_id']
+    //     );
     // }
 }

+ 13 - 0
migrations/CreateSubjectTable.php

@@ -9,6 +9,7 @@ class CreateSubjectTable extends \yii\db\Migration
     public function safeUp()
     {
         $identity_id_schema = Subject::getIdentityIdSchema();
+
         $identity_id_builder = $this->db->schema->createColumnSchemaBuilder(
             $identity_id_schema->dbType,
             $identity_id_schema->size
@@ -18,6 +19,18 @@ class CreateSubjectTable extends \yii\db\Migration
             'identity_id' => $identity_id_builder->notNull(),
             'distinguished_name' => $this->string()->notNull()->unique(),
         ]);
+
+        if($this->db->driverName != 'sqlite') {
+            $this->addForeignKey(
+                Subject::tableName() . '_identity',
+                Subject::tableName(),
+                'identity_id',
+                Subject::getIdentityTableSchema()->name,
+                $identity_id_schema->name,
+                'cascade',
+                'restrict'
+            );
+        }
     }
 
     public function safeDown()

+ 6 - 6
tests/SubjectTest.php

@@ -24,9 +24,9 @@ class SubjectTest extends TestCase
 
     public function testCreateModel()
     {
-        (new Subject($this->alice->id, 'CN=Alice,C=AT'))->save();
-        (new Subject($this->alice->id, 'CN=Alice,O=Office,C=AT'))->save();
-        (new Subject($this->bob->id, 'CN=Bob,C=AT'))->save();
+        (new Subject($this->alice, 'CN=Alice,C=AT'))->save();
+        (new Subject($this->alice, 'CN=Alice,O=Office,C=AT'))->save();
+        (new Subject($this->bob, 'CN=Bob,C=AT'))->save();
         $subjects = ArrayHelper::map(
             Subject::find()->all(),
             function($s) { return $s->getAttributes(); }
@@ -44,9 +44,9 @@ class SubjectTest extends TestCase
 
     public function testDNUnique()
     {
-        $this->assertTrue((new Subject($this->alice->id, 'CN=Alice,C=AT'))->save());
-        $this->assertTrue((new Subject($this->bob->id, 'CN=Bob,C=AT'))->save());
-        $dup = new Subject($this->alice->id, 'CN=Alice,C=AT');
+        $this->assertTrue((new Subject($this->alice, 'CN=Alice,C=AT'))->save());
+        $this->assertTrue((new Subject($this->bob, 'CN=Bob,C=AT'))->save());
+        $dup = new Subject($this->alice, 'CN=Alice,C=AT');
         $this->assertFalse($dup->save());
         $this->assertEquals(1, sizeof($dup->getErrors()));
         $this->assertEquals(1, sizeof($dup->getErrors('distinguished_name')));