WebHU - Programozási kérdések és válaszok

A felhasználói szerepkör hozzárendelése regisztrációkor sikertelen, RBAC használatával a Yii2-ben

Dolgozom egy olyan kódon, amelyben az adminisztrátornak kell regisztrálnia a felhasználókat, és szerepeket rendelnie hozzájuk. Sikerült kitalálnom a kódot az űrlapadatok gyűjtéséhez, a felhasználók regisztrálásához az adatbázisban, de a DbManager meghívásának utolsó lépése a szerepek kiosztásához sikertelen. A kódjaim alább láthatók;

Íme a actionCreate() függvény:

public function actionCreate()
{
    $model = new Staff();

    if ($model->load(Yii::$app->request->post()) && $model->signup()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

Itt van a Staff() modell regisztrációs funkciója

public function signup()
{
    if (!$this->validate()) {
        return null;
    }

    $user = new Admin();
    $user->username = $this->username;
    $user->email = $this->email;
    $user->setPassword($this->password);
    $user->generateAuthKey();
    $user->first_name = $this->first_name;
    $user->last_name = $this->last_name;
    $user->mobile = $this->mobile;
    $user->station_id = $this->station_id;

    if($user->save()) {
        $p_key = $user->getPrimaryKey();

        $r=new DbManager;
        // $r->init();
        if($this->role == 1) {
            $role = 'courier';
            $r->assign($role, $p_key);   //(userId, role)
        }
        else if($this->role == 2) {
            $role = 'tickets_officer';
            $r->assign($role, $p_key);   //(userId, role)
        }
        else if($this->role == 3) {
            $role = 'supervisor';
            $r->assign($role, $p_key);   //(userId, role)
        }

    }

    return $p_key;
}

A következő hibaüzenetet kapom: PHP Notice – yii\base\ErrorException

Trying to get property of non-object

public function assign($role, $userId)
{
    $assignment = new Assignment([
        'userId' => $userId,
        'roleName' => $role->name,
        'createdAt' => time(),
    ]);

    $this->db->createCommand()
        ->insert($this->assignmentTable, [
            'user_id' => $assignment->userId,
            'item_name' => $assignment->roleName,
            'created_at' => $assignment->createdAt,
        ])->execute();

A fenti hibakódban a 'roleName' => $role->name, jelű sor alá van húzva, ami azt jelenti, hogy itt van a probléma.

Ne feledje, hogy a szerepeimet egy legördülő menüből kapom meg, ahol az eladások értéke 1, 2 vagy 3.

30.05.2017

Válaszok:


1

Először is meg kell határoznia a authManager komponenst, ahelyett, hogy közvetlenül a DbManager osztályt használná.

A assign() logikája megváltozott. A legújabb verziókban karakterlánc helyett Role objektumot vesz igénybe.

$auth = Yii::$app->authManager;

// You should previously init it once, e.c. in migration, like this: $auth->createRole('courier');
$courier = $auth->getRole('courier');
$auth->assign($courier, $p_key);
30.05.2017
  • Wow, nagyon köszönöm haver. Nagy megmentő vagy. Ez pont így működött. Az interneten nincs ilyen dokumentáció. Azt hiszem, az elavult dokumentumokat követem. Köszönöm még egyszer. 30.05.2017
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..