Role::removeUser()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 11
rs 9.2
cc 4
eloc 7
nc 4
nop 1
1
<?php
2
3
namespace EmilMoe\Guardian\Http\Models;
4
5
use EmilMoe\Guardian\Support\Guardian;
6
use Illuminate\Database\Eloquent\Model;
7
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
8
9
class Role extends Model
10
{
11
    /**
12
     * The table associated with the model.
13
     *
14
     * @var string
15
     */
16
    protected $table;
17
18
    /**
19
     * The attributes that are mass assignable.
20
     *
21
     * @var array
22
     */
23
    protected $fillable = ['name', 'client_id'];
24
25
    /**
26
     * The attributes that should be cast to native types.
27
     *
28
     * @var array
29
     */
30
    protected $casts = ['locked' => 'boolean'];
31
32
    /**
33
     * Save a new model and return the instance.
34
     *
35
     * @param array $attributes
36
     * @return static
37
     */
38
    public static function create(array $attributes = [])
39
    {
40
        if (Guardian::hasClients())
41
            $attributes[Guardian::getClientColumn()] = Guardian::getClientId();
42
43
        return parent::create($attributes);
44
    }
45
46
    /**
47
     * Create a new Role model instance.
48
     *
49
     * @param array $attributes
50
     */
51
    public function __construct(array $attributes = [])
52
    {
53
        $this->table = config('guardian.table.role');
54
        parent::__construct($attributes);
55
    }
56
57
    /**
58
     * Get all permissions attached to the role.
59
     *
60
     * @return BelongsToMany
61
     */
62
    public function permissions()
63
    {
64
        return $this->belongsToMany(Permission::class, Guardian::getRolesPermissionsTable(), 'role_id', 'permission_id')
65
            ->withTimestamps();
66
    }
67
68
    /**
69
     * Get all users that are attached to the role.
70
     * 
71
     * @return BelongsToMany
72
     */
73
    public function users()
74
    {
75
        return $this->belongsToMany(Guardian::getUserClass(), Guardian::getUsersRolesTable(), 'role_id', 'user_id')
76
            ->withTimestamps();
77
    }
78
79
    /**
80
     * Update the model in the database.
81
     *
82
     * @param array $attributes
83
     * @param array $options
84
     * @return bool|int
85
     */
86
    public function update(array $attributes = [], array $options = [])
87
    {
88
        if (Guardian::hasClients())
89
            $attributes[Guardian::getClientColumn()] = Guardian::getClientId();
90
91
        if ($this->locked)
92
            return false;
93
94
        return parent::update($attributes, $options);
95
    }
96
97
    /**
98
     * Add user to role.
99
     *
100
     * If user doesn't have same client id or role is locked,
101
     * the action will be prevented.
102
     *
103
     * @param int $userid
104
     */
105
    public function addUser($userid)
106
    {
107
        if ($this->locked == true)
108
            return;
109
110
        if (Guardian::hasClients())
111
            if (Guardian::getClientId() != $this->{Guardian::getClientColumn()})
112
                return;
113
114
        if (! $this->users()->get()->contains($userid))
115
            $this->users()->attach($userid);
116
    }
117
118
    /**
119
     * Remove user from role.
120
     *
121
     * If user doesn't have same client id or role is locked,
122
     * the action will be prevented.
123
     *
124
     * @param int $userid
125
     */
126
    public function removeUser($userid)
127
    {
128
        if ($this->locked == true)
129
            return;
130
131
        if (Guardian::hasClients())
132
            if (Guardian::getClientId() != $this->{Guardian::getClientColumn()})
133
                return;
134
135
        $this->users()->detach($userid);
136
    }
137
138
    /**
139
     * Add permission to role.
140
     *
141
     * If user doesn't have same client id or role is locked,
142
     * the action will be prevented.
143
     *
144
     * @param string $permission
145
     */
146
    public function addPermission($permission)
147
    {
148
        if ($this->locked == true)
149
            return;
150
151
        if (Guardian::hasClients())
152
            if (Guardian::getClientId() != $this->{Guardian::getClientColumn()})
153
                return;
154
155
        $id = Permission::where('name', $permission)->first()->id;
156
157
        if (! $this->permissions()->get()->contains($id))
158
            $this->permissions()->attach($id);
159
    }
160
161
    /**
162
     * Remove permission from role.
163
     *
164
     * If user doesn't have same client id or role is locked,
165
     * the action will be prevented.
166
     *
167
     * @param string $permission
168
     */
169
    public function removePermission($permission)
170
    {
171
        if ($this->locked == true)
172
            return;
173
174
        if (Guardian::hasClients())
175
            if (Guardian::getClientId() != $this->{Guardian::getClientColumn()})
176
                return;
177
178
        $id = Permission::where('name', $permission)->first()->id;
179
180
        $this->permissions()->detach($id);
181
    }
182
183
    /**
184
     * Scope to require client ID is met.
185
     *
186
     * @param $query
187
     * @return mixed
188
     */
189
    public function scopeClient($query)
190
    {
191
        if (! Guardian::hasClients())
192
            return $query;
193
194
        return $query->where('client_id', Guardian::getClientId());
195
    }
196
197
    /**
198
     * Scope to ensure selected roles are not locked.
199
     *
200
     * @param $query
201
     * @return mixed
202
     */
203
    public function scopeNotLocked($query)
204
    {
205
        return $query->where('locked', false);
206
    }
207
}