Class: Msip::Ability

Inherits:
Object
  • Object
show all
Includes:
CanCan::Ability
Defined in:
app/models/msip/ability.rb

Overview

Definición del control de acceso como lo requiere cancancan

Constant Summary collapse

ROLADMIN =
1
ROLDIR =

ROLINV = 2

3
ROLOPERADOR =

ROLCOOR = 4

ROLANALI = 5
ROLES =

ROLSIST = 6

[
  ["Administrador", ROLADMIN], # 1
  ["", 0], # 2
  ["Directivo", ROLDIR], # 3
  ["", 0], # 4
  ["Operador", ROLOPERADOR], # 5
  ["", 0], # 6
]
ROLES_CA =
[
  "Crear copias de respaldo cifradas. " \
    "Administrar usuarios. " \
    "Administrar tablas básicas. ",
  "", # 2
  "", # 3
  "", # 4
  "", # 5
  "", # 6
  "", # 7
]
BASICAS_PROPIAS =
[
  ["Msip", "centropoblado"],
  ["Msip", "departamento"],
  ["Msip", "estadosol"],
  ["Msip", "etiqueta"],
  ["Msip", "etnia"],
  ["Msip", "fuenteprensa"],
  ["Msip", "grupo"],
  ["Msip", "municipio"],
  ["Msip", "oficina"],
  ["Msip", "pais"],
  ["Msip", "perfilorgsocial"],
  ["Msip", "sectororgsocial"],
  ["Msip", "tcentropoblado"],
  ["Msip", "tema"],
  ["Msip", "tdocumento"],
  ["Msip", "tipoorg"],
  ["Msip", "trelacion"],
  ["Msip", "trivalente"],
  ["Msip", "tsitio"],
  ["Msip", "ubicacionpre"],
  ["Msip", "vereda"],
]
INISEC_TB =
{
  msip_centropoblado: 1000000,
  msip_departamento: 10000,
  msip_municipio: 100000,
  msip_pais: 1000,
  msip_ubicacionpre: 10000000,
  msip_vereda: 1000000,
}
BASICAS_ID_NOAUTO =
[
  ["Msip", "tcentropoblado"],
  ["Msip", "trelacion"],
]
NOBASICAS_INDSEQID =
[
  ["Msip", "anexo"],
  ["Msip", "centropoblado_histvigencia"],
  ["Msip", "departamento_histvigencia"],
  ["Msip", "municipio_histvigencia"],
  ["Msip", "pais_histvigencia"],
  ["Msip", "grupoper"],
  ["Msip", "persona"],
  ["Msip", "persona_trelacion"],
  ["Msip", "ubicacion"],
  ["", "usuario"],
]
BASICAS_PRIO =
[
  ["Msip", "tcentropoblado"],
  ["Msip", "pais"],
  ["Msip", "departamento"],
  ["Msip", "municipio"],
  ["Msip", "centropoblado"],
  ["Msip", "vereda"],
  ["Msip", "oficina"],
]

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.lista_modelos_personaObject



151
152
153
154
155
156
157
# File 'app/models/msip/ability.rb', line 151

def self.lista_modelos_persona
  [
    Msip::EtiquetaPersona,
    Msip::Persona, 
    Msip::PersonaTrelacion
  ]
end

.tb_clase(t) ⇒ Object

Recibe una tabla básica como pareja [Modulo, clase] y retorna clase completa Modulo::Clase



132
133
134
135
136
137
138
139
# File 'app/models/msip/ability.rb', line 132

def self.tb_clase(t)
  k = if t[0] != ""
    t[0] + "::" + t[1].camelize
  else
    t[1].camelize
  end
  k.constantize
end

.tb_modelo(t) ⇒ Object

Recibe una tabla básica como pareja [Modulo, clase] y retorna nombre de tabla modulo_clase



143
144
145
146
147
148
149
# File 'app/models/msip/ability.rb', line 143

def self.tb_modelo(t)
  if t[0] != ""
    t[0].underscore.gsub(%r{/}, "_") + "_" + t[1]
  else
    t[1]
  end
end

Instance Method Details

#basicas_id_noautoObject

Tablas básicas cuyo id no es autoincremental



92
93
94
# File 'app/models/msip/ability.rb', line 92

def basicas_id_noauto
  BASICAS_ID_NOAUTO
end

#inisec_tbObject

Retorna diccionario con inicialización para secuencia de ids de algunas tablas básicas que comienzan en valores mayor a 100. Las tablas básicas que no esten indexadas comienzan secuencia de ids en 100



73
74
75
# File 'app/models/msip/ability.rb', line 73

def inisec_tb
  INISEC_TB
end

#initialize_msip(usuario = nil) ⇒ Object

Se definen habilidades con cancancan Util en motores y aplicaciones de prueba En aplicaciones es mejor escribir completo el modelo de autorización para facilitar su análisis y evitar cambios inesperados al actualizar motores

Parameters:

  • usuario (defaults to: nil)

    Usuario que hace petición



166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# File 'app/models/msip/ability.rb', line 166

def initialize_msip(usuario = nil)
  # El primer argumento para can es la acción a la que se da permiso,
  # el segundo es el recurso sobre el que puede realizar la acción,
  # el tercero opcional es un diccionario de condiciones para filtrar
  # más (e.g :publicado => true).
  #
  # El primer argumento puede ser :manage para indicar toda acción,
  # o grupos de acciones como :read (incluye :show e :index),
  # :create, :update y :destroy.
  #
  # Si como segundo argumento usa :all se aplica a todo recurso,
  # o puede ser una clase.
  #
  # Detalles en el wiki de cancan:
  #   https://github.com/ryanb/cancan/wiki/Defining-Abilities

  # Sin autenticación puede consultarse DIVIPOLA
  can(:read, [
    Msip::Pais, Msip::Departamento, Msip::Municipio, Msip::Centropoblado, Msip::Vereda,
  ])
  if !usuario || usuario.fechadeshabilitacion
    return
  end

  can(:contar, Msip::Ubicacion)
  can(:buscar, Msip::Ubicacion)
  can(:lista, Msip::Ubicacion)
  can(:descarga_anexo, Msip::Anexo)
  can(:mostrar_portada, Msip::Anexo)
  can(:abre_anexo, Msip::Anexo)
  can(:nuevo, Msip::Ubicacion)
  can(:read, Msip::Ubicacionpre)

  if usuario&.rol

    can(:read, Msip::Ability::lista_modelos_persona)
    case usuario.rol
    when Ability::ROLANALI
      can([:new, :create, :read, :update], Msip::Grupoper)
      can([:new, :create, :read, :update], Msip::Orgsocial)
      can([:new, :create, :read, :update], Msip::Ability::lista_modelos_persona)
      can([:new, :create, :read, :update], Msip::Solicitud)
      can(:read, Msip::Ubicacion)
      can(:new, Msip::Ubicacion)
      can([:update, :create, :destroy], Msip::Ubicacion)
      can([:new, :index, :create, :show], ::Usuario, rol: 5)
      can([:show, :destroy], ::Usuario, nusuario: usuario.nusuario)
    when Ability::ROLADMIN
      can(:manage, Msip::Bitacora)
      can(:manage, Msip::Grupoper)
      can(:manage, Msip::Orgsocial)
      can(:manage, Msip::Ability::lista_modelos_persona)
      can(:manage, Msip::Respaldo7z)
      can(:manage, Msip::Solicitud)
      can(:manage, Msip::Tema)
      can(:manage, Msip::Ubicacion)
      can(:manage, Msip::Ubicacionpre)
      can(:manage, ::Usuario)
      can(:manage, :tablasbasicas)
      tablasbasicas.each do |t|
        c = Ability.tb_clase(t)
        can(:manage, c)
      end
    end
  end
end

#nobasicas_indice_seq_con_idObject

Tablas no básicas pero que tienen índice *_seq_id



110
111
112
# File 'app/models/msip/ability.rb', line 110

def nobasicas_indice_seq_con_id
  NOBASICAS_INDSEQID
end

#tablasbasicasObject

Retorna arreglo de tablas básicas No conviene usar variables de clas @@tablasbasicas Cuando varios motores heredan e inicializan, pues al cargar en modo eager puede evaluarse de último una clase que no se espera.



82
83
84
# File 'app/models/msip/ability.rb', line 82

def tablasbasicas
  BASICAS_PROPIAS
end

#tablasbasicas_prioObject

Tablas básicas que deben volcarse primero –por ser requeridas por otras básicas



126
127
128
# File 'app/models/msip/ability.rb', line 126

def tablasbasicas_prio
  BASICAS_PRIO
end