diff --git a/.github/workflows/build.yml b/.github/workflows/phpunit.yml similarity index 93% rename from .github/workflows/build.yml rename to .github/workflows/phpunit.yml index 6afb60b..b307b8e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/phpunit.yml @@ -1,4 +1,4 @@ -name: build +name: PHPUnit on: push: @@ -46,6 +46,9 @@ jobs: - php: 8.3 laravel: 11.* phpunit: ~10.5 + - php: 8.4 + laravel: 11.* + phpunit: ~10.5 name: Laravel${{ matrix.laravel }}-PHP${{ matrix.php }} diff --git a/README.md b/README.md index 7c16187..6ae89a0 100755 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-
+
@@ -123,6 +123,13 @@ if (Enforcer::enforce("eve", "articles", "edit")) {
```
+By default, [Gate](https://laravel.com/docs/11.x/authorization#gates) checks will be automatically intercepted
+. You can check if a user has a permission with Laravel's default `can` function:
+
+```php
+$user->can('articles,read');
+```
+
### Using Enforcer Api
It provides a very rich api to facilitate various operations on the Policy:
diff --git a/src/Adapters/DatabaseAdapter.php b/src/Adapters/DatabaseAdapter.php
index 4f8d506..2647ef8 100755
--- a/src/Adapters/DatabaseAdapter.php
+++ b/src/Adapters/DatabaseAdapter.php
@@ -14,7 +14,6 @@
use Casbin\Persist\AdapterHelper;
use DateTime;
use Casbin\Exceptions\InvalidFilterTypeException;
-use Illuminate\Support\Facades\DB;
/**
* DatabaseAdapter.
@@ -28,14 +27,14 @@ class DatabaseAdapter implements DatabaseAdapterContract, BatchDatabaseAdapterCo
/**
* @var bool
*/
- private $filtered = false;
+ private bool $filtered = false;
/**
* Rules eloquent model.
*
* @var Rule
*/
- protected $eloquent;
+ protected Rule $eloquent;
/**
* the DatabaseAdapter constructor.
@@ -331,10 +330,8 @@ public function loadFilteredPolicy(Model $model, $filter): void
}
$rows = $instance->get()->makeHidden(['created_at','updated_at', 'id'])->toArray();
foreach ($rows as $row) {
- $row = array_filter($row, function($value) { return !is_null($value) && $value !== ''; });
- $line = implode(', ', array_filter($row, function ($val) {
- return '' != $val && !is_null($val);
- }));
+ $row = array_filter($row, static fn($value): bool => !is_null($value) && $value !== '');
+ $line = implode(', ', array_filter($row, static fn ($val): bool => '' != $val && !is_null($val)));
$this->loadPolicyLine(trim($line), $model);
}
$this->setFiltered(true);
diff --git a/src/Commands/GroupAdd.php b/src/Commands/GroupAdd.php
index 07da2bf..c5441ec 100644
--- a/src/Commands/GroupAdd.php
+++ b/src/Commands/GroupAdd.php
@@ -33,7 +33,7 @@ class GroupAdd extends Command
public function handle()
{
$params = explode(',', $this->argument('policy'));
- array_walk($params, function (&$value) {
+ array_walk($params, static function (&$value): void {
$value = trim($value);
});
$ret = Enforcer::addGroupingPolicy(...$params);
diff --git a/src/Commands/PolicyAdd.php b/src/Commands/PolicyAdd.php
index 992fb8d..03b6da8 100644
--- a/src/Commands/PolicyAdd.php
+++ b/src/Commands/PolicyAdd.php
@@ -33,7 +33,7 @@ class PolicyAdd extends Command
public function handle()
{
$params = explode(',', $this->argument('policy'));
- array_walk($params, function (&$value) {
+ array_walk($params, static function (&$value): void {
$value = trim($value);
});
$ret = Enforcer::addPolicy(...$params);
diff --git a/src/EnforcerLocalizer.php b/src/EnforcerLocalizer.php
index 81f4929..36297f8 100644
--- a/src/EnforcerLocalizer.php
+++ b/src/EnforcerLocalizer.php
@@ -4,6 +4,7 @@
use Illuminate\Contracts\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Access\Gate;
+use Illuminate\Foundation\Application;
use Lauthz\Facades\Enforcer;
class EnforcerLocalizer
@@ -11,16 +12,16 @@ class EnforcerLocalizer
/**
* The application instance.
*
- * @var \Illuminate\Foundation\Application
+ * @var Application
*/
- protected $app;
+ protected Application $app;
/**
* Create a new localizer instance.
*
- * @param \Illuminate\Foundation\Application $app
+ * @param Application $app
*/
- public function __construct($app)
+ public function __construct(Application $app)
{
$this->app = $app;
}
diff --git a/src/EnforcerManager.php b/src/EnforcerManager.php
index 62e3a47..19a25ee 100755
--- a/src/EnforcerManager.php
+++ b/src/EnforcerManager.php
@@ -8,6 +8,7 @@
use Casbin\Log\Logger\DefaultLogger;
use Lauthz\Contracts\Factory;
use Lauthz\Models\Rule;
+use Illuminate\Foundation\Application;
use Illuminate\Support\Arr;
use InvalidArgumentException;
use Lauthz\Loaders\ModelLoaderManager;
@@ -20,23 +21,23 @@ class EnforcerManager implements Factory
/**
* The application instance.
*
- * @var \Illuminate\Foundation\Application
+ * @var \
*/
- protected $app;
+ protected Application $app;
/**
* The array of created "guards".
*
* @var array
*/
- protected $guards = [];
+ protected array $guards = [];
/**
* Create a new manager instance.
*
- * @param \Illuminate\Foundation\Application $app
+ * @param Application $app
*/
- public function __construct($app)
+ public function __construct(Application $app)
{
$this->app = $app;
}
diff --git a/src/LauthzServiceProvider.php b/src/LauthzServiceProvider.php
index 7d60cfe..5b90d25 100644
--- a/src/LauthzServiceProvider.php
+++ b/src/LauthzServiceProvider.php
@@ -51,17 +51,11 @@ protected function bootObserver()
*/
public function register()
{
- $this->app->singleton('enforcer', function ($app) {
- return new EnforcerManager($app);
- });
+ $this->app->singleton('enforcer', fn ($app) => new EnforcerManager($app));
- $this->app->singleton(ModelLoaderManager::class, function ($app) {
- return new ModelLoaderManager($app);
- });
+ $this->app->singleton(ModelLoaderManager::class, fn ($app) => new ModelLoaderManager($app));
- $this->app->singleton(EnforcerLocalizer::class, function ($app) {
- return new EnforcerLocalizer($app);
- });
+ $this->app->singleton(EnforcerLocalizer::class, fn ($app) => new EnforcerLocalizer($app));
}
/**
diff --git a/src/Loaders/FileLoader.php b/src/Loaders/FileLoader.php
index e2845c2..d2279e4 100644
--- a/src/Loaders/FileLoader.php
+++ b/src/Loaders/FileLoader.php
@@ -13,7 +13,7 @@ class FileLoader implements ModelLoader
*
* @var string
*/
- private $filePath;
+ private string $filePath;
/**
* Constructor to initialize the file path.
diff --git a/src/Loaders/TextLoader.php b/src/Loaders/TextLoader.php
index 5257a3d..a79f6cb 100644
--- a/src/Loaders/TextLoader.php
+++ b/src/Loaders/TextLoader.php
@@ -13,7 +13,7 @@ class TextLoader implements ModelLoader
*
* @var string
*/
- private $text;
+ private string $text;
/**
* Constructor to initialize the model text.
diff --git a/src/Loaders/UrlLoader.php b/src/Loaders/UrlLoader.php
index f07c27c..c1ef4ca 100644
--- a/src/Loaders/UrlLoader.php
+++ b/src/Loaders/UrlLoader.php
@@ -14,7 +14,7 @@ class UrlLoader implements ModelLoader
*
* @var string
*/
- private $url;
+ private string $url;
/**
* Constructor to initialize the url path.
diff --git a/src/Models/Rule.php b/src/Models/Rule.php
index 9259a40..e045855 100755
--- a/src/Models/Rule.php
+++ b/src/Models/Rule.php
@@ -61,9 +61,7 @@ public function __construct(array $attributes = [], $guard = '')
*/
public function getAllFromCache()
{
- $get = function () {
- return $this->select('ptype', 'v0', 'v1', 'v2', 'v3', 'v4', 'v5')->get()->toArray();
- };
+ $get = fn () => $this->select('ptype', 'v0', 'v1', 'v2', 'v3', 'v4', 'v5')->get()->toArray();
if (!$this->config('cache.enabled', false)) {
return $get();
}