yajra /
laravel-acl
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | namespace Yajra\Acl\Traits; |
||
| 4 | |||
| 5 | use Illuminate\Database\Eloquent\Relations\BelongsToMany; |
||
| 6 | use Yajra\Acl\Models\Permission; |
||
| 7 | |||
| 8 | /** |
||
| 9 | * @property \Illuminate\Database\Eloquent\Collection|Permission[] permissions |
||
| 10 | * @mixin \Illuminate\Database\Eloquent\Model |
||
| 11 | */ |
||
| 12 | trait InteractsWithPermission |
||
| 13 | { |
||
| 14 | private $permissionClass; |
||
| 15 | |||
| 16 | /** |
||
| 17 | * Grant permissions by slug(/s). |
||
| 18 | * |
||
| 19 | * @param string|array $slug |
||
| 20 | */ |
||
| 21 | public function grantPermissionBySlug($slug) |
||
| 22 | { |
||
| 23 | $this->getPermissionClass() |
||
| 24 | ->newQuery() |
||
| 25 | ->whereIn('slug', (array) $slug) |
||
| 26 | ->each(function ($permission) { |
||
| 27 | $this->grantPermission($permission); |
||
| 28 | }); |
||
| 29 | |||
| 30 | $this->load('permissions'); |
||
|
0 ignored issues
–
show
|
|||
| 31 | } |
||
| 32 | |||
| 33 | /** |
||
| 34 | * Get Permission class. |
||
| 35 | * |
||
| 36 | * @return \Yajra\Acl\Models\Permission |
||
| 37 | */ |
||
| 38 | public function getPermissionClass(): Permission |
||
| 39 | { |
||
| 40 | if (!isset($this->permissionClass)) { |
||
| 41 | $this->permissionClass = resolve(config('acl.permission')); |
||
| 42 | } |
||
| 43 | |||
| 44 | return $this->permissionClass; |
||
| 45 | } |
||
| 46 | |||
| 47 | /** |
||
| 48 | * Get related permissions. |
||
| 49 | * |
||
| 50 | * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany |
||
| 51 | */ |
||
| 52 | public function permissions(): BelongsToMany |
||
| 53 | { |
||
| 54 | return $this->belongsToMany(config('acl.permission', Permission::class))->withTimestamps(); |
||
|
0 ignored issues
–
show
It seems like
belongsToMany() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the Loading history...
|
|||
| 55 | } |
||
| 56 | |||
| 57 | /** |
||
| 58 | * Grant permissions by resource. |
||
| 59 | * |
||
| 60 | * @param string|array $resource |
||
| 61 | */ |
||
| 62 | public function grantPermissionByResource($resource) |
||
| 63 | { |
||
| 64 | $this->getPermissionClass() |
||
| 65 | ->newQuery() |
||
| 66 | ->whereIn('resource', (array) $resource) |
||
| 67 | ->each(function ($permission) { |
||
| 68 | $this->grantPermission($permission); |
||
| 69 | }); |
||
| 70 | |||
| 71 | $this->load('permissions'); |
||
|
0 ignored issues
–
show
It seems like
load() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the Loading history...
|
|||
| 72 | } |
||
| 73 | |||
| 74 | /** |
||
| 75 | * Grant the given permission. |
||
| 76 | * |
||
| 77 | * @param \Illuminate\Support\Collection|\Illuminate\Database\Eloquent\Model|array $id |
||
| 78 | * @param array $attributes |
||
| 79 | * @param bool $touch |
||
| 80 | * @return void |
||
| 81 | */ |
||
| 82 | public function grantPermission($id, array $attributes = [], $touch = true) |
||
| 83 | { |
||
| 84 | $this->permissions()->attach($id, $attributes, $touch); |
||
| 85 | |||
| 86 | $this->load('permissions'); |
||
|
0 ignored issues
–
show
It seems like
load() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the Loading history...
|
|||
| 87 | } |
||
| 88 | |||
| 89 | /** |
||
| 90 | * Revoke permissions by the given slug(/s). |
||
| 91 | * |
||
| 92 | * @param string|array $slug |
||
| 93 | */ |
||
| 94 | public function revokePermissionBySlug($slug) |
||
| 95 | { |
||
| 96 | $this->getPermissionClass() |
||
| 97 | ->newQuery() |
||
| 98 | ->whereIn('slug', (array) $slug) |
||
| 99 | ->each(function ($permission) { |
||
| 100 | $this->revokePermission($permission); |
||
| 101 | }); |
||
| 102 | |||
| 103 | $this->load('permissions'); |
||
|
0 ignored issues
–
show
It seems like
load() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the Loading history...
|
|||
| 104 | } |
||
| 105 | |||
| 106 | /** |
||
| 107 | * Revoke permissions by resource. |
||
| 108 | * |
||
| 109 | * @param string|array $resource |
||
| 110 | */ |
||
| 111 | public function revokePermissionByResource($resource) |
||
| 112 | { |
||
| 113 | $this->getPermissionClass() |
||
| 114 | ->newQuery() |
||
| 115 | ->whereIn('resource', (array) $resource) |
||
| 116 | ->each(function ($permission) { |
||
| 117 | $this->revokePermission($permission); |
||
| 118 | }); |
||
| 119 | |||
| 120 | $this->load('permissions'); |
||
|
0 ignored issues
–
show
It seems like
load() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the Loading history...
|
|||
| 121 | } |
||
| 122 | |||
| 123 | /** |
||
| 124 | * Revokes the given permission. |
||
| 125 | * |
||
| 126 | * @param mixed $id |
||
| 127 | * @param bool $touch |
||
| 128 | * @return int |
||
| 129 | */ |
||
| 130 | public function revokePermission($id = null, $touch = true): int |
||
| 131 | { |
||
| 132 | $detached = $this->permissions()->detach($id, $touch); |
||
| 133 | |||
| 134 | $this->load('permissions'); |
||
|
0 ignored issues
–
show
It seems like
load() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the Loading history...
|
|||
| 135 | |||
| 136 | return $detached; |
||
| 137 | } |
||
| 138 | |||
| 139 | /** |
||
| 140 | * Syncs the given permission. |
||
| 141 | * |
||
| 142 | * @param \Illuminate\Support\Collection|\Illuminate\Database\Eloquent\Model|array $ids |
||
| 143 | * @param bool $detaching |
||
| 144 | * @return array |
||
| 145 | */ |
||
| 146 | public function syncPermissions($ids, $detaching = true): array |
||
| 147 | { |
||
| 148 | $synced = $this->permissions()->sync($ids, $detaching); |
||
| 149 | |||
| 150 | $this->load('permissions'); |
||
|
0 ignored issues
–
show
It seems like
load() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the Loading history...
|
|||
| 151 | |||
| 152 | return $synced; |
||
| 153 | } |
||
| 154 | |||
| 155 | /** |
||
| 156 | * Revokes all permissions. |
||
| 157 | * |
||
| 158 | * @return int |
||
| 159 | */ |
||
| 160 | public function revokeAllPermissions(): int |
||
| 161 | { |
||
| 162 | $detached = $this->permissions()->detach(); |
||
| 163 | |||
| 164 | $this->load('permissions'); |
||
|
0 ignored issues
–
show
It seems like
load() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the Loading history...
|
|||
| 165 | |||
| 166 | return $detached; |
||
| 167 | } |
||
| 168 | |||
| 169 | /** |
||
| 170 | * Get list of permissions slug. |
||
| 171 | * |
||
| 172 | * @return array |
||
| 173 | */ |
||
| 174 | public function getPermissions(): array |
||
| 175 | { |
||
| 176 | return $this->permissions->pluck('slug')->toArray(); |
||
| 177 | } |
||
| 178 | } |
||
| 179 |
This check looks for methods that are used by a trait but not required by it.
To illustrate, let’s look at the following code example
The trait
Idableprovides a methodequalsIdthat in turn relies on the methodgetId(). If this method does not exist on a class mixing in this trait, the method will fail.Adding the
getId()as an abstract method to the trait will make sure it is available.