Subject.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace fphammerle\yii2\auth\clientcert;
  3. class Subject extends \yii\db\ActiveRecord
  4. {
  5. public static function tableName()
  6. {
  7. return 'identity_cert_subject';
  8. }
  9. public function __construct(\yii\web\IdentityInterface $identity = null, $dn = null)
  10. {
  11. $this->identity = $identity;
  12. $this->distinguished_name = $dn;
  13. }
  14. public function rules()
  15. {
  16. return [
  17. [['distinguished_name', 'identity_id'], 'required'],
  18. [['distinguished_name'], 'required'],
  19. [['distinguished_name'], 'string'],
  20. [['distinguished_name'], 'unique'],
  21. [['identity_id'], self::getIdentityIdSchema()->type],
  22. ];
  23. }
  24. public static function getIdentityClass()
  25. {
  26. return \Yii::$app->user->identityClass;
  27. }
  28. /**
  29. * @return \yii\db\TableSchema
  30. */
  31. public static function getIdentityTableSchema()
  32. {
  33. $cls = Subject::getIdentityClass();
  34. return (new $cls)->getTableSchema();
  35. }
  36. /**
  37. * @return \yii\db\ColumnSchema
  38. */
  39. public static function getIdentityIdSchema()
  40. {
  41. $keys = array_filter(
  42. self::getIdentityTableSchema()->columns,
  43. function($c) { return $c->isPrimaryKey; }
  44. );
  45. assert(sizeof($keys) == 1);
  46. return array_pop($keys);
  47. }
  48. public function getIdentity()
  49. {
  50. return $this->hasOne(
  51. self::getIdentityClass(),
  52. [Subject::getIdentityIdSchema()->name => 'identity_id']
  53. );
  54. }
  55. public function setIdentity(\yii\web\IdentityInterface $identity = null)
  56. {
  57. if($identity === null) {
  58. $this->identity_id = null;
  59. } else {
  60. // @see \yii\web\IdentityInterface::getId()
  61. $this->identity_id = $identity->getId();
  62. }
  63. // TODO: update related record
  64. // $this->getRelatedRecords()['identity'] = $identity;
  65. }
  66. }