add role to user

This commit is contained in:
Roland Schneider 2015-11-05 09:26:08 +01:00
parent bdd5a94b3f
commit 43d5598f23
9 changed files with 151 additions and 17 deletions

View File

@ -65,7 +65,7 @@ class UserController extends \backend\controllers\BackendController
$this->updateAccountAssignments($model); $this->updateAccountAssignments($model);
// return $this->redirect(['view', 'id' => $model->id]); return $this->redirect(['index' ]);
} }

View File

@ -10,6 +10,8 @@ class UserCreate extends User{
public $password_repeat; public $password_repeat;
public $selected_accounts = []; public $selected_accounts = [];
public $role;
/** /**
* @inheritdoc * @inheritdoc
*/ */
@ -28,6 +30,9 @@ class UserCreate extends User{
['username' ,'unique' ], ['username' ,'unique' ],
[['password_plain' ,'password_repeat'] ,'string','min' =>6 ], [['password_plain' ,'password_repeat'] ,'string','min' =>6 ],
[['password_repeat'] ,'validatePasswordRepeat' ], [['password_repeat'] ,'validatePasswordRepeat' ],
[['role'], 'required'],
[['role'], 'string', 'max' => 20],
]; ];
} }
@ -66,9 +71,9 @@ class UserCreate extends User{
public function afterSave($insert, $changedAttributes){ public function afterSave($insert, $changedAttributes){
parent::afterSave($insert, $changedAttributes); parent::afterSave($insert, $changedAttributes);
// $am = Yii::$app->authManager; $am = Yii::$app->authManager;
// $role = $am->getRole('admin'); $role = $am->getRole($this->role);
// Yii::$app->authManager->assign($role, $this->id); Yii::$app->authManager->assign($role, $this->id);
} }
} }

View File

@ -10,6 +10,8 @@ class UserUpdate extends User {
public $password_repeat; public $password_repeat;
public $selected_accounts = []; public $selected_accounts = [];
public $role;
/** /**
* @inheritdoc * @inheritdoc
* @formatter:off * @formatter:off
@ -28,7 +30,9 @@ class UserUpdate extends User {
$this->addError($attribute, 'Invalid array'); $this->addError($attribute, 'Invalid array');
} }
} }
] ],
[['role'], 'required'],
[['role'], 'string', 'max' => 20],
]; ];
} }
@ -68,10 +72,11 @@ class UserUpdate extends User {
return false; return false;
} }
} }
public function afterSave($insert, $changedAttributes) { public function afterSave($insert, $changedAttributes){
parent::afterSave ( $insert, $changedAttributes ); parent::afterSave($insert, $changedAttributes);
// $am = Yii::$app->authManager; $am = Yii::$app->authManager;
// $role = $am->getRole('admin'); $am->revokeAll($this->id);
// Yii::$app->authManager->assign($role, $this->id); $role = $am->getRole($this->role);
Yii::$app->authManager->assign($role, $this->id);
} }
} }

View File

@ -3,15 +3,21 @@
use yii\helpers\Html; use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
use yii\grid\GridView; use yii\grid\GridView;
use yii\base\Widget;
use yii\base\Object;
use yii\data\ArrayDataProvider; use yii\data\ArrayDataProvider;
use common\components\RoleDefinition;
/* @var $this yii\web\View */ /* @var $this yii\web\View */
/* @var $model common\models\User */ /* @var $model common\models\User */
/* @var $form yii\widgets\ActiveForm */ /* @var $form yii\widgets\ActiveForm */
?> ?>
<?php
$roleOptions = RoleDefinition::roleLabels();
asort($roleOptions);
?>
<div class="user-form"> <div class="user-form">
<?php $form = ActiveForm::begin(); ?> <?php $form = ActiveForm::begin(); ?>
@ -21,6 +27,7 @@ use yii\data\ArrayDataProvider;
<?= $form->field($model, 'email')->textInput() ?> <?= $form->field($model, 'email')->textInput() ?>
<?= $form->field($model, 'password_plain')->passwordInput() ?> <?= $form->field($model, 'password_plain')->passwordInput() ?>
<?= $form->field($model, 'password_repeat')->passwordInput() ?> <?= $form->field($model, 'password_repeat')->passwordInput() ?>
<?= $form->field($model, 'role')->dropDownList($roleOptions) ?>
<?php <?php

View File

@ -2,6 +2,7 @@
use yii\helpers\Html; use yii\helpers\Html;
use yii\grid\GridView; use yii\grid\GridView;
use common\components\RoleDefinition;
/* @var $this yii\web\View */ /* @var $this yii\web\View */
/* @var $searchModel frontend\models\UserSearch */ /* @var $searchModel frontend\models\UserSearch */
@ -28,6 +29,15 @@ $this->params['breadcrumbs'][] = $this->title;
'email:email', 'email:email',
'created_at:datetime', 'created_at:datetime',
[
'attribute' => 'role',
'value' => function ($model){
$roles = \Yii::$app->authManager->getRolesByUser($model->id );
return implode(', ', array_map(function ($role) { return sprintf("%s", RoleDefinition::getRoleLabel($role->name)); }, $roles ));
}
] ,
['class' => 'yii\grid\ActionColumn', ['class' => 'yii\grid\ActionColumn',
'template' => '{view} {update}' 'template' => '{view} {update}'
], ],

View File

@ -25,6 +25,10 @@ $this->params['breadcrumbs'][] = $this->title;
'email:email', 'email:email',
'statusHuman', 'statusHuman',
'created_at:datetime', 'created_at:datetime',
[
'attribute' => 'role',
'value' => $model->roleString
]
], ],
]) ?> ]) ?>

View File

@ -1,10 +1,6 @@
<?php <?php
namespace common\components; namespace common\components;
use yii\base\InvalidConfigException;
use Yii;
use yii\base\Model;
class Helper class Helper
{ {
@ -27,4 +23,28 @@ class Helper
$query->andFilterWhere([ '<' , $field , $end ] ); $query->andFilterWhere([ '<' , $field , $end ] );
} }
public static function roleLabels(){
return [
'reception' => Yii::t('common/role' ,'Reception'),
'admin' => Yii::t('common/role' ,'Administrator'),
'employee' => Yii::t('common/role' ,'Alkalmazott'),
];
}
public static function roleDefinitions(){
return [
'employee' => [
'canAllow' => [ 'employee'],
],
'admin' => [
'canAllow' => ['admin','reception','employee'],
],
'reception' => [
'canAllow' => [ ],
],
];
}
} }

View File

@ -0,0 +1,65 @@
<?php
namespace common\components;
use \Yii;
class RoleDefinition{
public static function roleLabels(){
return [
'reception' => Yii::t('common/role' ,'Reception'),
'admin' => Yii::t('common/role' ,'Administrator'),
'employee' => Yii::t('common/role' ,'Employee'),
];
}
public static function getRoleLabel($role){
$result = null;
$roleLabels = self::roleLabels();
if ( array_key_exists($role, $roleLabels)){
$result = $roleLabels[$role];
}
return $result;
}
public static function roleDefinitions(){
return [
'employee' => [
'canAllow' => [ 'employee'],
],
'admin' => [
'canAllow' => ['admin','reception','employee'],
],
'reception' => [
'canAllow' => [ ],
],
];
}
public static function getRoleDefinition($role){
$defs = self::roleDefinitions();
$result = null;
if ( array_key_exists($role, $defs)){
$result = $defs[$role];
}
$result = $defs[$role];
return $result;
}
public static function getRolesCanAllow($role){
$result = [];
$def = self::getRoleDefinition($role);
if ( isset($def)){
$result = $def['canAllow'];
}
return $result;
}
}

View File

@ -6,6 +6,7 @@ use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior; use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord; use yii\db\ActiveRecord;
use yii\web\IdentityInterface; use yii\web\IdentityInterface;
use common\components\RoleDefinition;
/** /**
* User model * User model
@ -212,10 +213,27 @@ class User extends ActiveRecord implements IdentityInterface
'username' => Yii::t('backend/user', 'Username'), 'username' => Yii::t('backend/user', 'Username'),
'email' => Yii::t('backend/user', 'E-Mail'), 'email' => Yii::t('backend/user', 'E-Mail'),
'created_at' => Yii::t('backend/user', 'Created at'), 'created_at' => Yii::t('backend/user', 'Created at'),
'role' => Yii::t('backend/user', 'Role'),
]; ];
} }
/**
*
*
* @return \yii\rbac\Role[]*/
public function getRoles(){
$roles = \Yii::$app->authManager->getRolesByUser($this->id );
return $roles;
}
/**
* @return string
* */
public function getRoleString(){
$roles = \Yii::$app->authManager->getRolesByUser($this->id );
return implode(', ', array_map(function ($role) { return sprintf("%s", RoleDefinition::getRoleLabel($role->name)); }, $roles ));
}
/** /**
* $param int $forceIncludeAccount id warehouse, that should be included in list, even if it is inactive * $param int $forceIncludeAccount id warehouse, that should be included in list, even if it is inactive