it-swarm.com.de

Wie kann ich dem Benutzer eine Rolle hinzufügen? Yii2

Als Alpha haben wir das Yii2-Framework verwendet. Die Rolle für den bereits erstellten Benutzer ist das Problem, wie er dem Benutzer zugewiesen wird. Dokumentation fehlt. 

17
Alexufo

Für die Datenbankversion von RBAC verwenden Sie DbManager (Zitat frm: Alexufo):

use yii\rbac\DbManager;
$r=new DbManager;
$r->init();
$r->createRole("admin","Administrator");
$r->save();

$r->assign('1','admin');   //1 is user id 

Beispiel Zugriffsregeln:

<?php
namespace backend\controllers;

use yii;
use yii\web\AccessControl;
use yii\web\Controller;

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        //'actions' => ['login', 'error'], // Define specific actions
                        'allow' => true, // Has access
                        'roles' => ['@'], // '@' All logged in users / or your access role e.g. 'admin', 'user'
                    ],
                    [
                        'allow' => false, // Do not have access
                        'roles'=>['?'], // Guests '?'
                    ],
                ],
            ],
        ];
    }

    public function actionIndex()
    {
        return $this->render( 'index' );
    }
}
?>

Vergessen Sie nicht, dies Ihrer Konfigurationsdatei (config/main.php) hinzuzufügen:

'components' => [
    'authManager'=>array(
        'class' => 'yii\rbac\DbManager',
        'defaultRoles' => ['end-user'],
    ),
    ...
]

Tabellen:

drop table if exists `tbl_auth_assignment`;
drop table if exists `tbl_auth_item_child`;
drop table if exists `tbl_auth_item`;

create table `tbl_auth_item`
(
   `name`                 varchar(64) not null,
   `type`                 integer not null,
   `description`          text,
   `biz_rule`              text,
   `data`                 text,
   primary key (`name`),
   key `type` (`type`)
) engine InnoDB;

create table `tbl_auth_item_child`
(
   `parent`               varchar(64) not null,
   `child`                varchar(64) not null,
   primary key (`parent`,`child`),
   foreign key (`parent`) references `tbl_auth_item` (`name`) on delete cascade on update cascade,
   foreign key (`child`) references `tbl_auth_item` (`name`) on delete cascade on update cascade
) engine InnoDB;

create table `tbl_auth_assignment`
(
   `item_name`            varchar(64) not null,
   `user_id`              varchar(64) not null,
   `biz_rule`              text,
   `data`                 text,
   primary key (`item_name`,`user_id`),
   foreign key (`item_name`) references `tbl_auth_item` (`name`) on delete cascade on update cascade
) engine InnoDB;

Sie finden diese Informationen auch im Verzeichnis "yii/rbac" (einschließlich anderer SQL-Dateien) . Funktionsumfang und weitere Details:

https://github.com/yiisoft/yii2/blob/master/docs/guide/security-authorization.md

15
Martijn H.
$user_id = 1;

$auth = new DbManager;
$auth->init();
$role = $auth->createRole('editor');
$auth->add($role);

$auth->assign($role, $user_id);

================================================== ========================....., wenn Sie statt der Erstellung die Rolle auswählen möchten

$auth = new DbManager;
$auth->init();
$role = $auth->getRole('admin');
$auth->assign($role, $user_id);

100% gearbeitet!

5
Oleg Ozimok

Gelöst!

================= Rolle erstellen =============

use yii\rbac\PhpManager;
$r=new PhpManager;
$r->init();
$r->createRole("admin","Администратор"); 
$r->save();

================ ====================

$r->assign('1','admin');   //1 is user id
3
Alexufo

Eine wirklich einfache Möglichkeit, eine Administratorrolle zu erreichen, besteht darin, dies Ihrem Controller hinzuzufügen:

use yii;
/**
 * @inheritdoc
 */
public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'actions' => ['index'],
                    'roles' => ['@'],
                ],
                [
                    'allow' => !Yii::$app->user->isGuest && Yii::$app->user->identity->isAdmin(),
                    'actions' => ['view', 'create', 'update', 'delete'],
                ],
            ],
        ],
    ];
}

Fügen Sie dann Ihrem User-Modell eine isAdmin() hinzu, die true für Ihre Admin-Benutzer und false für alle anderen zurückgibt. Persönlich verwende ich:

public function isAdmin() {
    return Self::ROLE_ADMIN === $this->role;
}

Zugegeben, dies ist nicht "nach dem Buch". Aber es ist einfach, schnell und effektiv.

1
Ivo Renkema
$user_id = \Yii::$app->user->id;

$auth = new DbManager;
$auth->init();
$role = $auth->createRole('editor');
$auth->add($role);

$auth->assign($role, $user_id);
0
Kalpesh Desai