Как программно назначить роль пользователю-администратору?


Мне нужно программно назначить роль пользователя администратору. Как я могу? Я попробовал некоторые методы, такие как

try {
$user->setRoleIds(array(<role_id>))
    ->setRoleUserId($user->getUserId())
    ->saveRelations();

} catch (Exception $e) {
    echo $e->getMessage();
    exit;
}

Но когда мы применяем приведенный выше код, база данных повреждается и выдает ошибку - "Parent Role id 'G5' does not exist".

Это происходит потому, что, когда я применяю приведенный выше код, пользователь-администратор с идентификатором родительской роли удаляется, и я не смогу получить доступ к базе данных, если я воссоздам ее снова!

Может ли кто-нибудь указать на решение?

Author: Marius, 2013-07-24

2 answers

Похоже, вы делаете это нормально. Все зависит от используемых вами значений.
Этот фрагмент кода сработал для меня. Предполагая, что $id является идентификатором администратора, о котором идет речь:

$user = Mage::getModel('admin/user')->load($id);
$user->setRoleIds(array(5))
    ->setRoleUserId($user->getUserId())
    ->saveRelations();

5 - идентификатор роли. Он даже работает с идентификатором роли, которого не существует. Он просто удаляет любую роль у пользователя-администратора.

 3
Author: Marius, 2013-07-24 06:55:21

Странно! Но, наконец, получил решение от здесь.

Попробовал поймать вот так,

         try {
          $role = Mage::getModel("admin/role");
          $role->setParent_id(5);
          $role->setTree_level(1);
          $role->setRole_type('U');
          $role->setUser_id($user_id);
          $role->save();
          echo "Your username: ".$username.", and password: ".$password;
            } catch (Exception $e) {
            echo $e->getMessage();
            }

И это Сработало. Здесь parent Id - мой пользовательский идентификатор роли. $user_id - идентификатор пользователя, к которому должна быть прикреплена роль.

 2
Author: Vishnu R, 2013-07-24 07:30:45