I has permissions trait
This commit is contained in:
parent
5f8c190120
commit
ebc23249c4
|
|
@ -0,0 +1,2 @@
|
|||
docker
|
||||
.vscode
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
phpunit.xml
|
||||
reports
|
||||
sandbox
|
||||
vendor
|
||||
composer.lock
|
||||
.idea/
|
||||
workbench
|
||||
.phpunit.result.cache
|
||||
|
|
@ -54,11 +54,7 @@
|
|||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Workbench\\App\\": "workbench/app/",
|
||||
"Workbench\\Database\\Factories\\": "workbench/database/factories/",
|
||||
"Workbench\\Database\\Seeders\\": "workbench/database/seeders/"
|
||||
}
|
||||
"psr-4": {}
|
||||
},
|
||||
"scripts": {
|
||||
"post-autoload-dump": [
|
||||
|
|
@ -75,6 +71,10 @@
|
|||
],
|
||||
"lint": [
|
||||
"@php vendor/bin/pint --ansi"
|
||||
],
|
||||
"test": [
|
||||
"@clear",
|
||||
"@php vendor/bin/phpunit"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.4/phpunit.xsd"
|
||||
>
|
||||
<source>
|
||||
<include>
|
||||
<directory suffix=".php">src/</directory>
|
||||
</include>
|
||||
</source>
|
||||
<testsuites>
|
||||
<testsuite name="Permissions Test Suite">
|
||||
<directory>tests</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<php>
|
||||
<env name="CACHE_DRIVER" value="array"/>
|
||||
<ini name="memory_limit" value="512M"/>
|
||||
</php>
|
||||
</phpunit>
|
||||
|
|
@ -8,7 +8,7 @@ trait HasPermissions
|
|||
{
|
||||
public function hasPermission(string $permission): bool
|
||||
{
|
||||
$allpermissions = $this->allPermissions();
|
||||
$allpermissions = $this->permissions();
|
||||
|
||||
if ($allpermissions->contains('slug', '*')) {
|
||||
return true; // If any permission is '*', all permissions are granted
|
||||
|
|
@ -31,7 +31,7 @@ trait HasPermissions
|
|||
);
|
||||
}
|
||||
|
||||
public function permissions()
|
||||
public function individualPermissions()
|
||||
{
|
||||
return $this->morphToMany(
|
||||
config('roles.models.permission'),
|
||||
|
|
@ -40,6 +40,16 @@ trait HasPermissions
|
|||
);
|
||||
}
|
||||
|
||||
public function permissions()
|
||||
{
|
||||
$rolePerms = $this->rolePermissions()->get();
|
||||
$directPerms = $this->permissions()->get();
|
||||
|
||||
return $rolePerms
|
||||
->merge($directPerms)
|
||||
->unique('id');
|
||||
}
|
||||
|
||||
public function assignPermission($permission)
|
||||
{
|
||||
$permission_class = config('roles.models.permission');
|
||||
|
|
@ -85,32 +95,4 @@ trait HasPermissions
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all permissions directly assigned or inherited via roles.
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function allPermissions()
|
||||
{
|
||||
// Directly assigned permissions
|
||||
$direct = $this->permissions()->get();
|
||||
|
||||
// Permissions via roles (if the roles() relation exists)
|
||||
if (method_exists($this, 'roles')) {
|
||||
$rolePermissions = $this->roles()
|
||||
->with('permissions')
|
||||
->get()
|
||||
->pluck('permissions')
|
||||
->flatten();
|
||||
} else {
|
||||
$rolePermissions = collect();
|
||||
}
|
||||
|
||||
// Merge and dedupe by 'id'
|
||||
return $direct
|
||||
->merge($rolePermissions)
|
||||
->unique('id')
|
||||
->values();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
laravel: '@testbench'
|
||||
|
||||
providers:
|
||||
# - Workbench\App\Providers\WorkbenchServiceProvider
|
||||
|
||||
migrations:
|
||||
- workbench/database/migrations
|
||||
|
||||
seeders:
|
||||
- Workbench\Database\Seeders\DatabaseSeeder
|
||||
|
||||
workbench:
|
||||
start: '/'
|
||||
install: true
|
||||
health: false
|
||||
discovers:
|
||||
web: true
|
||||
api: true
|
||||
commands: true
|
||||
components: false
|
||||
factories: true
|
||||
views: false
|
||||
build:
|
||||
- asset-publish
|
||||
- create-sqlite-db
|
||||
- db-wipe
|
||||
- migrate-fresh
|
||||
assets:
|
||||
- laravel-assets
|
||||
sync:
|
||||
- from: storage
|
||||
to: workbench/storage
|
||||
reverse: true
|
||||
Loading…
Reference in New Issue