I developing a site with two different registrations, and I have 2 different table, Im using RbacDB, and in the web config in the components section I have user configuration, according to this I want to know how I can use 2 different fields in the config file?
config :
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => '213h2i3121h12osiajls',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
// Here after user I need to add another config user-two
'user-two' => [
'identityClass' => 'app\models\SecondUser',
'enableAutoLogin' => true,
],
when I do it, shows this error enter image description here
Thanks!
Try to set a class property in the user-two component:
'user-two' => [
'class' => 'yii\web\User'
'identityClass' => 'app\models\SecondUser',
'enableAutoLogin' => true,
],
or create new class inherited from the yii\web\User class and set like this:
'user-two' => [
'class' => 'app\models\NewClassInheritedFromUserClass'
....
]
Maybe this will help you.
You have to create a web user class for the second identity
namespace app\components;
class UserTwo extends \yii\web\User{
}
than specify the class name in your config
'user-two' => [
'class'=> 'app\components\UserTwo'
'identityClass' => 'app\models\SecondUser',
'enableAutoLogin' => true,
],
I have gone through the yii2 framework internals. As I have understood, You can make N Identities following below technique;
- Above solutions are just the suggestions which are partial answers and some what helpful. kindly Follow my below changes in depth and you can create N identities as desired.
N identities are very useful when you do not want to implement Complex RBAC (Role Based Access Control) and just want to Filter Access at controller's request.
Let us Assume I have to create yet another Identity called 'Franchise' other than existing User which is nicely coupled inside Yii2 Framework.
DB Migrations
Create a new migration file using command
yii migrate/create create_franchise
Copy paste the content of already available migration file at location PROJECT_NAME\console\migrations something like 'm170311_105858_create_user.php' and rename table name from 'user' to 'franchise'.
Now, run migration command
yii/migrate
You must get something like this on command prompt
Apply the above migrations? (yes|no) [no]:yes applying m170311_105950_create_franchise create table {{%franchise}} ... done (time: 1.304s) applied m170311_105950_create_franchise (time: 1.350s)
check DB whether DB is created. (I assume you have made DB settings in PROJECT_NAME\common\config\main-local.php)
- Please note that whatever may be the Identity class, it shall now use above 'Franchise' Table.
Creating Franchise Model
Just goto 'Gii' Module and create a model for newly create franchise table.
Model location must be PROJECT_NAME\common\models\Franchise.php
Make Sure that the Model class implements IdentityInterface and also implements mandatory methods of IdentityInterface
Identity Class
If you go to location PROJECT_NAME\vendor\yiisoft\yii2\web\User.php. This is the class that is referred everywhere in your project as Yii::$app->user. Copy paste the content of this class and create a new File called PROJECT_NAME\vendor\yiisoft\yii2\web\Franchise.php and paste the content in it. Make below changes in the file.
- Find 'user' and replace it with 'franchise'.
- Find 'User' and replace it with 'Franchise'.
- Find $loginUrl = ['site/login']; and replace it with $loginUrl = ['franchise/login']; as you are going to have different controller to handle Franchise related actions.
- Find $identityCookie = ['name' => '_identity', 'httpOnly' => true]; and replace the 'name' as '_fidentity' (you can see difference, identity cookie must be unique)
- Find $authTimeoutParam = '__expire'; and replace it with $authTimeoutParam = '_f_expire';
PROJECT_NAME\vendor\yiisoft\yii2\web\Application.php
In Application.php add below method,
public function getFranchise() { return $this->get('franchise'); }
Also find method coreComponents() and add one more entry as below,
'Franchise' => ['class' => 'yii\web\Franchise'],
PROJECT_NAME\frontend\config\main.php
Inside components add below entry just after 'user' entry,
'franchise' => [ 'identityClass' => 'common\models\Franchise', 'enableAutoLogin' => true, 'class' => 'yii\web\Franchise', 'identityCookie' => ['name' => '_fidentity-frontend', 'httpOnly' => true], ],
来源:https://stackoverflow.com/questions/35254678/multiple-user-identity-in-config-yii2