-
-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathGenericTenant.php
More file actions
142 lines (130 loc) · 3.04 KB
/
GenericTenant.php
File metadata and controls
142 lines (130 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
declare(strict_types=1);
namespace Sprout\Support;
use Sprout\Contracts\Tenant;
/**
* Generic Tenant
*
* This is a default implementation of the {@see \Sprout\Contracts\Tenant}
* interface for the use with {@see \Sprout\Providers\DatabaseTenantProvider}
* as the tenant entity.
*
* @pacakge Core
*
* @codeCoverageIgnore
*/
class GenericTenant implements Tenant
{
/**
* All the tenant's attributes.
*
* @var array<string, mixed>
*/
protected array $attributes;
/**
* Create a new generic User object.
*
* @param array<string, mixed> $attributes
*
* @return void
*/
public function __construct(array $attributes = [])
{
$this->attributes = $attributes;
}
/**
* Get the tenant identifier
*
* Retrieve the identifier used to publicly identify the tenant.
*
* @return string
*/
public function getTenantIdentifier(): string
{
/** @phpstan-ignore-next-line */
return $this->attributes[$this->getTenantIdentifierName()];
}
/**
* Get the name of the tenant identifier
*
* Retrieve the storage name for the tenant identifier, whether that's an
* attribute, column name, array key or something else.
* Used primarily by {@see \Sprout\Contracts\TenantProvider}.
*
* @return string
*/
public function getTenantIdentifierName(): string
{
return 'identifier';
}
/**
* Get the tenant key
*
* Retrieve the key used to identify a tenant internally.
*
* @return int|string
*/
public function getTenantKey(): int|string
{
/** @phpstan-ignore-next-line */
return $this->attributes[$this->getTenantKeyName()];
}
/**
* Get the name of the tenant key
*
* Retrieve the storage name for the tenant key, whether that's an
* attribute, column name, array key or something else.
* Used primarily by {@see \Sprout\Contracts\TenantProvider}.
*
* @return string
*/
public function getTenantKeyName(): string
{
return 'id';
}
/**
* Dynamically access the tenant's attributes.
*
* @param string $key
*
* @return mixed
*/
public function __get(string $key): mixed
{
return $this->attributes[$key];
}
/**
* Dynamically set an attribute on the tenant.
*
* @param string $key
* @param mixed $value
*
* @return void
*/
public function __set(string $key, mixed $value): void
{
$this->attributes[$key] = $value;
}
/**
* Dynamically check if a value is set on the tenant.
*
* @param string $key
*
* @return bool
*/
public function __isset(string $key): bool
{
return isset($this->attributes[$key]);
}
/**
* Dynamically unset a value on the tenant.
*
* @param string $key
*
* @return void
*/
public function __unset(string $key): void
{
unset($this->attributes[$key]);
}
}