1: | <?php |
2: | /** |
3: | * This code is licensed under AGPLv3 license or Afterlogic Software License |
4: | * if commercial version of the product was purchased. |
5: | * For full statements of the licenses see LICENSE-AFTERLOGIC and LICENSE-AGPL3 files. |
6: | */ |
7: | |
8: | namespace Aurora\Modules\Core\Models; |
9: | |
10: | use Aurora\System\Classes\Model; |
11: | use Aurora\Modules\Core\Models\Tenant; |
12: | |
13: | /** |
14: | * The Core User class. |
15: | * |
16: | * @license https://www.gnu.org/licenses/agpl-3.0.html AGPL-3.0 |
17: | * @license https://afterlogic.com/products/common-licensing Afterlogic Software License |
18: | * @copyright Copyright (c) 2023, Afterlogic Corp. |
19: | * |
20: | * @property int $Id Object primary key |
21: | * @property string $UUID Unique identifier of the object |
22: | * @property string $Name User name |
23: | * @property string $PublicId User public ID, usually equals user's email address |
24: | * @property int $IdTenant ID of the tetant a user relates to |
25: | * @property bool $IsDisabled Reserved for future use |
26: | * @property int $IdSubscription @Deprecated since 9.7.0 |
27: | * @property int $Role User role from \Aurora\System\Enums\UserRole |
28: | * @property \DateTime $LastLogin Date at time of last login |
29: | * @property string $LastLoginNow @Deprecated since 9.7.0 |
30: | * @property int $LoginsCount Stores the number of times user has logged in |
31: | * @property string $Language Interface language set for this user |
32: | * @property int $TimeFormat Time format set for this user |
33: | * @property string $DateFormat Date format set for this user |
34: | * @property string $Question1 @Deprecated since 9.7.0 |
35: | * @property string $Question2 @Deprecated since 9.7.0 |
36: | * @property string $Answer1 @Deprecated since 9.7.0 |
37: | * @property string $Answer2 @Deprecated since 9.7.0 |
38: | * @property bool $SipEnable @Deprecated since 9.7.0 |
39: | * @property string $SipImpi @Deprecated since 9.7.0 |
40: | * @property string $SipPassword @Deprecated since 9.7.0 |
41: | * @property bool $DesktopNotifications @Deprecated since 9.7.0 |
42: | * @property string $Capa @Deprecated since 9.7.0 |
43: | * @property string $CustomFields @Deprecated since 9.7.0 |
44: | * @property bool $FilesEnable @Deprecated since 9.7.0 |
45: | * @property string $EmailNotification @Deprecated since 9.7.0 |
46: | * @property string $PasswordResetHash @Deprecated since 9.7.0 |
47: | * @property bool $WriteSeparateLog If set to true, a separate log file is recorded for the user |
48: | * @property string $DefaultTimeZone Default time zone set for this user |
49: | * @property int $TokensValidFromTimestamp Timestamp the token is valid since |
50: | * @property array $Properties Custom properties for use by other modules |
51: | */ |
52: | class User extends Model |
53: | { |
54: | protected $table = 'core_users'; |
55: | |
56: | protected $moduleName = 'Core'; |
57: | |
58: | protected $parentType = Tenant::class; |
59: | |
60: | protected $parentKey = 'IdTenant'; |
61: | |
62: | protected $parentInheritedAttributes = [ |
63: | ]; |
64: | |
65: | protected $foreignModel = Tenant::class; |
66: | protected $foreignModelIdColumn = 'IdTenant'; // Column that refers to an external table |
67: | |
68: | /** |
69: | * The attributes that are mass assignable. |
70: | * |
71: | * @var array |
72: | */ |
73: | protected $fillable = [ |
74: | 'Id', |
75: | 'UUID', |
76: | 'Name', |
77: | 'PublicId', |
78: | 'IdTenant', |
79: | 'IsDisabled', |
80: | 'IdSubscription', |
81: | 'Role', |
82: | 'LastLogin', |
83: | 'LastLoginNow', |
84: | 'LoginsCount', |
85: | 'Language', |
86: | 'TimeFormat', |
87: | 'DateFormat', |
88: | 'Question1', |
89: | 'Question2', |
90: | 'Answer1', |
91: | 'Answer2', |
92: | 'SipEnable', |
93: | 'SipImpi', |
94: | 'SipPassword', |
95: | 'DesktopNotifications', |
96: | 'Capa', |
97: | 'CustomFields', |
98: | 'FilesEnable', |
99: | 'EmailNotification', |
100: | 'PasswordResetHash', |
101: | 'WriteSeparateLog', |
102: | 'DefaultTimeZone', |
103: | 'TokensValidFromTimestamp', |
104: | 'Properties' |
105: | ]; |
106: | |
107: | protected $validationRules = [ |
108: | 'TimeFormat' => 'in:0,1', |
109: | ]; |
110: | |
111: | /** |
112: | * The attributes that should be hidden for arrays. |
113: | * |
114: | * @var array |
115: | */ |
116: | protected $hidden = [ |
117: | ]; |
118: | |
119: | protected $casts = [ |
120: | 'Properties' => 'array', |
121: | 'IsDisabled' => 'boolean', |
122: | 'SipEnable' => 'boolean', |
123: | 'DesktopNotifications' => 'boolean', |
124: | 'FilesEnable' => 'boolean', |
125: | 'WriteSeparateLog' => 'boolean' |
126: | ]; |
127: | |
128: | protected $attributes = [ |
129: | ]; |
130: | |
131: | /** |
132: | * Checks if a user is a superadmin. |
133: | * |
134: | * return bool |
135: | */ |
136: | public function isAdmin() |
137: | { |
138: | return $this->Id === -1; |
139: | } |
140: | |
141: | /** |
142: | * Checks if a user can act as a regular user. |
143: | * |
144: | * return bool |
145: | */ |
146: | public function isNormalOrTenant() |
147: | { |
148: | return $this->Role === \Aurora\System\Enums\UserRole::NormalUser || $this->Role === \Aurora\System\Enums\UserRole::TenantAdmin; |
149: | } |
150: | |
151: | /** |
152: | * Returns array of groups the user is related to. |
153: | * |
154: | * return array |
155: | */ |
156: | public function Groups() |
157: | { |
158: | return $this->belongsToMany(Group::class, 'core_group_user', 'UserId', 'GroupId'); |
159: | } |
160: | } |
161: |