null], [['estatus'], 'integer'], [['creado', 'modificado', 'eliminado'], 'safe'], [['id'], 'string', 'max' => 36], [['correo', 'clave', 'nombre', 'telefono', 'alias', 'rol'], 'string', 'max' => 100], [['foto'], 'string', 'max' => 300], [['id'], 'unique'], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'correo' => 'Correo', 'clave' => 'Clave', 'nombre' => 'Nombre', 'estatus' => 'Estatus', 'telefono' => 'Telefono', 'alias' => 'Alias', 'foto' => 'Foto', 'rol' => 'Rol', 'creado' => 'Creado', 'modificado' => 'Modificado', 'eliminado' => 'Eliminado', 'idSujetoObligado' => 'Id Sujeto Obligado', 'idPonencia' => 'Id Ponencia', 'verificarCorreo' => 'Verificar Correo', ]; } /** * Gets query for [[media]]. * * @return \yii\db\ActiveQuery */ public function getMedia() { return $this->hasMany(Media::class, ['idUsuario' => 'id']); } public function getPermisos() { return $this->hasMany(PermisoUsuario::class, ['idUsuario' => 'id']) ->select("idPermiso") ->column(); } /** * Gets query for [[recursosRevision]]. * * @return \yii\db\ActiveQuery */ public function getRecursosRevision() { return $this->hasMany(RecursoRevision::class, ['idPonencia' => 'id']); } public function getEstatusPermiso() { return $this->hasMany(EstatusPermisoUsuario::class, ['idUsuario' => 'id']); } /** * Gets query for [[IdPonencia0]]. * * @return \yii\db\ActiveQuery */ public function getPonencia() { return $this->hasOne(Ponencia::class, ['id' => 'idPonencia']); } /** * Gets query for [[sujetoObligado]]. * * @return \yii\db\ActiveQuery */ public function getSujetoObligado() { return $this->hasOne(SujetoObligado::class, ['id' => 'idSujetoObligado']); } public function agregarClave($pwd) { $this->clave = Yii::$app->getSecurity()->generatePasswordHash($pwd); } public function validarClave($pwd) { return Yii::$app->getSecurity()->validatePassword($pwd, $this->clave); } /** * Consulta si el usuario cuenta con el permiso proporcionado. * @param string $permiso Valor del permiso a evaluar. * @return bool Regresa cierto si cuenta con permiso, de lo contrario, regresa falso. */ public function tienePermiso($permiso = null) { if ($permiso === null) { return false; } $permisos = $this->cargarPermisos($permiso); return isset($permisos[$permiso]) && $permisos[$permiso]; } /** * Consulta en la base de datos si el usuario cuenta con los permisos proporcionados. * @param string|array $permiso Valor del permiso a evaluar | lista de permisos a evaluar. * @return array Regresa un arreglo donde especifica, por permiso, si el usuario cuenta con algún permiso. * * [ * 'clave_permiso_encontrado' => true, * 'clave_permiso_no_encontrado' => false * ] */ public function cargarPermisos($permiso = null) { $noEstan = []; $permisosVacios = empty($this->_permisos); if (!$permisosVacios) { if (is_array($permiso)) { foreach ($permiso as $p) { if (!isset($this->_permisos[$p])) { $noEstan[] = $p; } } } else if (!isset($this->_permisos[$permiso])) { $noEstan[] = $permiso; } } if ($permisosVacios || !empty($noEstan)) { $permisosQuery = (new Query()) ->select([ 'case when ({{PermisoUsuario}}.[[idUsuario]] is not null) then true else false end as [[idUsuario]]', '{{Permiso}}.id', ]) ->from('Permiso') ->leftJoin( 'PermisoUsuario', '{{PermisoUsuario}}.[[idPermiso]] = {{Permiso}}.id and {{PermisoUsuario}}.[[idUsuario]] = :idUsuario', [':idUsuario' => $this->id] ) ->andWhere([ // 'idPermiso' => $permiso, '{{PermisoUsuario}}.eliminado' => null ]); if ($permisosVacios) { $permisosQuery->andWhere(['{{Permiso}}.id' => $permiso]); } else { $permisosQuery->andWhere(['{{Permiso}}.id' => $noEstan]); } $aux = $permisosQuery->indexBy('id') ->column(); if ($permisosVacios) { $this->_permisos = $aux; } else { foreach ($aux as $indice => $valor) { $this->_permisos[$indice] = $valor; } } } return $this->_permisos; } public function validarPerfilPermisos() { $permisos = $this->cargarPermisos(); $flag = false; foreach ($permisos as $permiso) { if ($permiso) { $flag = true; break; } } return $flag; } public static function crearSolicitante($rol = null, $idUsuario = "") { $permisoSolicitante = (new Query()) ->select('{{ColeccionPermisoPermiso}}.[[idPermiso]]') ->from('ColeccionPermisoPermiso') ->innerJoin('ColeccionPermiso', '{{ColeccionPermisoPermiso}}.[[idColeccion]] = {{ColeccionPermiso}}.id') ->andWhere(['{{ColeccionPermiso}}.clave' => "SOLICITANTE"]) ->column(); if ($rol === Usuario::ROL_USUARIO && $permisoSolicitante !== null) { foreach ($permisoSolicitante as $permiso) { $permisos = new PermisoUsuario(); $permisos->idUsuario = $idUsuario; $permisos->idPermiso = $permiso; $permisos->asignado = new Expression('now()'); $permisos->uuid(); if (!$permisos->save()) { return (new Respuesta($permiso)) ->mensaje("Ocurrió un problema al asignar permisos"); } } } } }