<?php namespace tests\codeception\unit\models; use Yii; use yii\codeception\TestCase; use Codeception\Specify; use yii\rbac\PhpManager; class MockRule extends \yii\rbac\Rule { const NAME = 'mock'; public function init() { parent::init(); $this->name = self::NAME; } public static $PASS = true; public function execute($user, $item, $params) { return self::$PASS; } } class InstanceAuthorizationTest extends TestCase { use Specify; private $auth; protected function setUp() { parent::setUp(); $this->auth = new PhpManager; $this->auth->removeAll(); } public function testSanity() { expect($this->auth->add(new MockRule))->true(); $base = $this->auth->createRole("base"); expect($this->auth->add($base))->true(); $implied = $this->auth->createRole("implied"); $implied->ruleName = MockRule::NAME; $this->auth->add($implied); $this->auth->addChild($implied, $base); expect($this->auth->getChildren($base->name))->greaterThan(0); $this->auth->assign($implied, 0); expect($this->auth->checkAccess(0, 'derp'))->false(); expect($this->auth->checkAccess(0, $implied->name))->true(); expect($this->auth->checkAccess(0, $base->name))->true(); MockRule::$PASS = false; expect($this->auth->checkAccess(0, $implied->name))->false(); expect($this->auth->checkAccess(0, $base->name))->false(); } }