123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- <?php
- namespace app\models;
- use common\data\Respuesta;
- use Yii;
- use yii\db\Expression;
- use yii\db\Query;
- /**
- * This is the model class for table "Usuario".
- *
- * @property string $id
- * @property string $correo
- * @property string $clave
- * @property string $nombre
- * @property int|null $estatus 0:inactivo, 1:activo
- * @property string $telefono
- * @property string|null $alias
- * @property string|null $foto
- * @property string $rol
- * @property string|null $creado
- * @property string|null $modificado
- * @property string|null $eliminado
- *
- */
- class Usuario extends ModeloBase {
- public const ACTIVO = 1;
- public const INACTIVO = 0;
- const ROL_ADMIN = "admin";
- const ROL_USUARIO = "usuario";
- const ROL_UNIDAD_ADMINISTRATIVA = "unidadAdministrativa";
- private $_permisos = [];
- /**
- * {@inheritdoc}
- */
- public static function tableName() {
- return 'Usuario';
- }
- /**
- * {@inheritdoc}
- */
- public function rules() {
- return [
- [['id', 'correo', 'clave', 'rol'], 'required'],
- [['estatus', 'nombre', 'telefono'], 'default', 'value' => 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");
- }
- }
- }
- }
- }
|