|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace yii\web;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Mock for the time() function for web classes
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
function time()
|
|
|
|
{
|
|
|
|
return \yiiunit\framework\web\UserTest::$time ?: \time();
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace yiiunit\framework\web;
|
|
|
|
|
|
|
|
use yii\base\NotSupportedException;
|
|
|
|
use yii\base\Component;
|
|
|
|
use yii\rbac\PhpManager;
|
|
|
|
use yii\web\IdentityInterface;
|
|
|
|
use yii\web\UrlManager;
|
|
|
|
use yii\web\UrlRule;
|
|
|
|
use yii\web\Request;
|
|
|
|
use Yii;
|
|
|
|
use yiiunit\TestCase;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @group web
|
|
|
|
*/
|
|
|
|
class UserTest extends TestCase
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var integer virtual time to be returned by mocked time() function.
|
|
|
|
* Null means normal time() behavior.
|
|
|
|
*/
|
|
|
|
public static $time;
|
|
|
|
|
|
|
|
protected function tearDown()
|
|
|
|
{
|
|
|
|
Yii::$app->session->removeAll();
|
|
|
|
static::$time = null;
|
|
|
|
parent::tearDown();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testLoginExpires()
|
|
|
|
{
|
|
|
|
if (getenv('TRAVIS') == 'true') {
|
|
|
|
$this->markTestSkipped('Can not reliably test this on travis-ci.');
|
|
|
|
}
|
|
|
|
|
|
|
|
$appConfig = [
|
|
|
|
'components' => [
|
|
|
|
'user' => [
|
|
|
|
'identityClass' => UserIdentity::className(),
|
|
|
|
'authTimeout' => 10,
|
|
|
|
],
|
|
|
|
'authManager' => [
|
|
|
|
'class' => PhpManager::className(),
|
|
|
|
'itemFile' => '@runtime/user_test_rbac_items.php',
|
|
|
|
'assignmentFile' => '@runtime/user_test_rbac_assignments.php',
|
|
|
|
'ruleFile' => '@runtime/user_test_rbac_rules.php',
|
|
|
|
]
|
|
|
|
],
|
|
|
|
];
|
|
|
|
$this->mockWebApplication($appConfig);
|
|
|
|
|
|
|
|
$am = Yii::$app->authManager;
|
|
|
|
$am->removeAll();
|
|
|
|
$am->add($role = $am->createPermission('rUser'));
|
|
|
|
$am->add($perm = $am->createPermission('doSomething'));
|
|
|
|
$am->addChild($role, $perm);
|
|
|
|
$am->assign($role, 'user1');
|
|
|
|
|
|
|
|
Yii::$app->session->removeAll();
|
|
|
|
static::$time = \time();
|
|
|
|
Yii::$app->user->login(UserIdentity::findIdentity('user1'));
|
|
|
|
|
|
|
|
// print_r(Yii::$app->session);
|
|
|
|
// print_r($_SESSION);
|
|
|
|
|
|
|
|
$this->mockWebApplication($appConfig);
|
|
|
|
$this->assertFalse(Yii::$app->user->isGuest);
|
|
|
|
$this->assertTrue(Yii::$app->user->can('doSomething'));
|
|
|
|
|
|
|
|
static::$time += 5;
|
|
|
|
$this->mockWebApplication($appConfig);
|
|
|
|
$this->assertFalse(Yii::$app->user->isGuest);
|
|
|
|
$this->assertTrue(Yii::$app->user->can('doSomething'));
|
|
|
|
|
|
|
|
static::$time += 11;
|
|
|
|
$this->mockWebApplication($appConfig);
|
|
|
|
$this->assertTrue(Yii::$app->user->isGuest);
|
|
|
|
$this->assertFalse(Yii::$app->user->can('doSomething'));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
class UserIdentity extends Component implements IdentityInterface
|
|
|
|
{
|
|
|
|
private static $ids = [
|
|
|
|
'user1',
|
|
|
|
'user2',
|
|
|
|
'user3',
|
|
|
|
];
|
|
|
|
|
|
|
|
private $_id;
|
|
|
|
|
|
|
|
public static function findIdentity($id)
|
|
|
|
{
|
|
|
|
if (in_array($id, static::$ids)) {
|
|
|
|
$identitiy = new static();
|
|
|
|
$identitiy->_id = $id;
|
|
|
|
return $identitiy;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function findIdentityByAccessToken($token, $type = null)
|
|
|
|
{
|
|
|
|
throw new NotSupportedException();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getId()
|
|
|
|
{
|
|
|
|
return $this->_id;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getAuthKey()
|
|
|
|
{
|
|
|
|
throw new NotSupportedException();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validateAuthKey($authKey)
|
|
|
|
{
|
|
|
|
throw new NotSupportedException();
|
|
|
|
}
|
|
|
|
}
|