feat: add ptype parameter to artisan commands and updated unit test

This commit is contained in:
Dobando 2024-05-24 12:13:57 +08:00
parent 124ab91abb
commit 718f846e77
3 changed files with 23 additions and 2 deletions

View File

@ -335,6 +335,8 @@ Adds a role for a user:
```bash
php artisan role:assign eve writer
# Specify the ptype of the role assignment by using the --ptype option.
php artisan role:assign eve writer --ptype=g2
```
### Using cache

View File

@ -17,7 +17,8 @@ class RoleAssign extends Command
*/
protected $signature = 'role:assign
{user : the identifier of user}
{role : the name of role}';
{role : the name of role}
{--ptype= : the ptype of role}';
/**
* The console command description.
@ -35,8 +36,9 @@ class RoleAssign extends Command
{
$user = $this->argument('user');
$role = $this->argument('role');
$ptype = $this->option('ptype') ?: 'g';
$ret = Enforcer::addRoleForUser($user, $role);
$ret = Enforcer::addNamedGroupingPolicy($ptype, $user, $role);
if ($ret) {
$this->info('Added `'.$role.'` role to `'.$user.'` successfully');
} else {

View File

@ -2,6 +2,7 @@
namespace Lauthz\Tests\Commands;
use Casbin\Model\Model;
use Lauthz\Facades\Enforcer;
use Lauthz\Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
@ -19,5 +20,21 @@ class RoleAssignTest extends TestCase
$exitCode = Artisan::call('role:assign', ['user' => 'eve', 'role' => 'writer']);
$this->assertFalse(0 === $exitCode);
$this->assertTrue(Enforcer::hasRoleForUser('eve', 'writer'));
$model = Model::newModel();
$model->addDef('r', 'r', 'sub, obj, act');
$model->addDef('p', 'p', 'sub, obj, act');
$model->addDef('g', 'g', '_, _');
$model->addDef('g', 'g2', '_, _');
$model->addDef('e', 'e', 'some(where (p.eft == allow))');
$model->addDef('m', 'm', 'g(r.sub, p.sub) && g2(r.obj, p.obj) && r.act == p.act');
Enforcer::setModel($model);
Enforcer::loadPolicy();
$this->assertFalse(Enforcer::hasNamedGroupingPolicy('g2', 'eve', 'writer'));
$exitCode = Artisan::call('role:assign', ['user' => 'eve', 'role' => 'writer', '--ptype' => 'g2']);
$this->assertTrue(0 === $exitCode);
$exitCode = Artisan::call('role:assign', ['user' => 'eve', 'role' => 'writer', '--ptype' => 'g2']);
$this->assertFalse(0 === $exitCode);
$this->assertTrue(Enforcer::hasNamedGroupingPolicy('g2', 'eve', 'writer'));
}
}