/
User.php
147 lines (131 loc) · 3.23 KB
/
User.php
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
143
144
145
146
147
<?php namespace App\Models;
use BeatSwitch\Lock\LockAware;
use BeatSwitch\Lock\Callers\Caller;
use App\Extensions\Lock\UserOwnership;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
class User extends BaseModel implements AuthenticatableContract, Caller, UserOwnership
{
use Authenticatable, LockAware;
const USER_TYPE_ADMIN = 'admin';
const USER_TYPE_GUEST = 'guest';
public static $userTypes = [self::USER_TYPE_ADMIN, self::USER_TYPE_GUEST];
/**
* The primary key for the model.
*
* @var string
*/
protected $primaryKey = 'user_id';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'user_id',
'first_name',
'last_name',
'email',
'phone',
'mobile',
'timezone_identifier',
'user_type'
];
/**
* Model validation.
*
* @var array
*/
protected $validationRules = [
'user_id' => 'uuid',
'email' => 'required|email',
'first_name' => 'string',
'last_name' => 'string',
'phone' => 'string',
'mobile' => 'string',
'country' => 'country',
'timezone_identifier' => 'timezone'
];
/**
* Get the credentials associated with the user.
*
* @return \Illuminate\Database\Eloquent\Relations\Relation
*/
public function userCredential()
{
return $this->hasOne(UserCredential::class);
}
/**
* Set the user's credentials.
*
* @param UserCredential $credential
* @return $this
*/
public function setCredential(UserCredential $credential)
{
$this->userCredential()->save($credential);
return $this;
}
/**
* Accessor to get full name attribute for the user.
*
* @return string
*/
public function getFullNameAttribute()
{
return sprintf('%s %s', $this->first_name, $this->last_name);
}
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
// If no user credential is associated with the user, just return an
// empty string which will trigger a ValidationException during
// password_verify()
if (!$this->userCredential) {
return '';
}
return $this->userCredential->password;
}
/**
* The type of caller for lock permission.
*
* @return string
*/
public function getCallerType()
{
return 'users';
}
/**
* The unique ID to identify the caller with for lock permission.
*
* @return string
*/
public function getCallerId()
{
return $this->user_id;
}
/**
* The caller's roles for lock permission.
*
* @return array
*/
public function getCallerRoles()
{
return [$this->user_type];
}
/**
* Check if the user is owns the entity.
*
* @param \App\Models\User $user
* @param string $entityId
* @return bool
*/
public static function userIsOwner($user, $entityId)
{
return $user->user_id == $entityId;
}
}