YII2 Duda RBAC y AuthManager

Saludos!

Estoy manejando un evento en donde debo enviar un correo a todos los usuarios que cumplan con la siguiente propiedad

\Yii::$app->user->can(‘aprobar-x’)

El detalle que tengo es que no encuentro un metodo que me retorne todos los usuarios que tenga este permiso para incluirlo en el "para" del correo.

Existe algun metodo que cumpla con esto o debo diseñar un search en el user model.

Agradecido de antemano por su apoyo (si requieren de algun dato adicional favor notificar)

Buenas.

Comprueba si existe un método parecido a getUsersByRole, y si no, te toca programarlo.

Pero yo lo haría directamente en la clase webuser(en la clase que utilizes para users, webuser es de Yii 1), con lo que quedaría algo así para recuperar tus usuarios:




$users = Yii::app()->user->getUsersByRole('role);



Un saludo.

No hay Metodos definidos en la base de yii, en la clase User para hacer esto directamente. :unsure:

Lo que podrías hacer es utilizar algo como:




$query1 = (new Query())->select('user_id')->from(Yii::$app->getAuthManager()->assignmentTable)

                                      	->where(['item_name'=>'permiso']);


$query2 = (new Query)->from('user_table')->where(['id' => $query1]);

Y allí tienes los usuarios, aunque no lo he probado, pero por allí van los tiros :D

Gracias por sus respuesta, en efecto no existe un metodo para tal fin pero encontré lo siguiente

Model User:




public static function findByRole($role)

    {

        return static::find()

            ->select('email, nombre, apellido')

            ->join('LEFT JOIN','auth_assignment','auth_assignment.user_id = id')

            ->where(['auth_assignment.item_name' => $role->name])

            ->all();

    }



Uso:




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

        $authorRole = $auth->getRole('aprobado-x');

        $to = User::findByRole($authorRole);



Buenas de nuevo.

Me alegro que encontrases la respuesta a tu pregunta pero… es lo que yo te dije q hicieras. No entiendo la cara d asombro de Bushi…

En fin, resuelto entonces.