php-casbin icon indicating copy to clipboard operation
php-casbin copied to clipboard

Cannot use multiple policy rule

Open Viously opened this issue 2 years ago • 2 comments

Hello, I try to use multiple policies as mentioned in documentation and I got some exceptions.

Model:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act
p2 = sub, act

[role_definition]
g = _, _
g2 = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, p.sub) && g2(r.obj, p.obj) && r.act == p.act

Policy:

p, alice, data1, read
p, bob, data2, write
p2, data_group_admin, write

g, alice, data_group_admin
g2, data1, data_group
g2, data2, data_group

PHP:

<?php

require_once './vendor/autoload.php';

use Casbin\Enforcer;
use Casbin\Model\Model;
use Casbin\Persist\Adapters\FileAdapter;

$model = Model::newModelFromFile('casbin/model.conf');
$adapter = new FileAdapter("casbin/policy.csv");
$e = new Enforcer($model, $adapter);

var_dump($e->enforce("alice", "write"));

Exception:

/Users/bastien/PhpstormProjects/testcasbin/vendor/casbin/casbin/src/CoreEnforcer.php:799:
array(2) {
  [0] =>
  string(5) "alice"
  [1] =>
  string(5) "write"
}
PHP Fatal error:  Uncaught Casbin\Exceptions\CasbinException: invalid request size: expected 3, got 2 in /Users/bastien/PhpstormProjects/testcasbin/vendor/casbin/casbin/src/CoreEnforcer.php:618
Stack trace:
#0 /Users/bastien/PhpstormProjects/testcasbin/vendor/casbin/casbin/src/CoreEnforcer.php(801): Casbin\CoreEnforcer->enforcing('', Array, 'alice', 'write')
#1 /Users/bastien/PhpstormProjects/testcasbin/test.php(13): Casbin\CoreEnforcer->enforce('alice', 'write')
#2 {main}
  thrown in /Users/bastien/PhpstormProjects/testcasbin/vendor/casbin/casbin/src/CoreEnforcer.php on line 618

Fatal error: Uncaught Casbin\Exceptions\CasbinException: invalid request size: expected 3, got 2 in /Users/bastien/PhpstormProjects/testcasbin/vendor/casbin/casbin/src/CoreEnforcer.php on line 618

Casbin\Exceptions\CasbinException: invalid request size: expected 3, got 2 in /Users/bastien/PhpstormProjects/testcasbin/vendor/casbin/casbin/src/CoreEnforcer.php on line 618

Call Stack:
    0.0006     396368   1. {main}() /Users/bastien/PhpstormProjects/testcasbin/test.php:0
    0.0094    1166224   2. Casbin\CoreEnforcer->enforce(...$rvals = variadic('alice', 'write')) /Users/bastien/PhpstormProjects/testcasbin/test.php:13
    0.0094    1166664   3. Casbin\CoreEnforcer->enforcing($matcher = '', $explains = [], ...$rvals = variadic('alice', 'write')) /Users/bastien/PhpstormProjects/testcasbin/vendor/casbin/casbin/src/CoreEnforcer.php:801

Viously avatar Mar 24 '22 14:03 Viously

@leeqvip

hsluoyz avatar Mar 24 '22 15:03 hsluoyz

@Viously Invalid request size: expected 3, got 2 : The number of parameters of enforce() must be the same as the number of configuration parameters of model .

leeqvip avatar Mar 28 '22 01:03 leeqvip