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 =
[
  ["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"],
]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#BASICAS_ID_NOAUTOArray<Array<String>>

Returns List of basic tables whose ID is not autoincremental.

Returns:

  • (Array<Array<String>>)

    List of basic tables whose ID is not autoincremental.



106
107
108
109
# File 'app/models/msip/ability.rb', line 106

BASICAS_ID_NOAUTO = [
  ["Msip", "tcentropoblado"],
  ["Msip", "trelacion"],
]

#BASICAS_PROPIASArray<Array<String>>

Returns List of proprietary basic tables.

Returns:

  • (Array<Array<String>>)

    List of proprietary basic tables.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/models/msip/ability.rb', line 48

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_TBHash

Returns Dictionary for initializing ID sequences of some basic tables.

Returns:

  • (Hash)

    Dictionary for initializing ID sequences of some basic tables.



74
75
76
77
78
79
80
81
# File 'app/models/msip/ability.rb', line 74

INISEC_TB = {
  msip_centropoblado: 1000000,
  msip_departamento: 10000,
  msip_municipio: 100000,
  msip_pais: 1000,
  msip_ubicacionpre: 10000000,
  msip_vereda: 1000000,
}

#ROLADMINInteger

Returns Role ID for Administrator.

Returns:

  • (Integer)

    Role ID for Administrator.



10
# File 'app/models/msip/ability.rb', line 10

ROLADMIN  = 1

#ROLDIRInteger

Returns Role ID for Director.

Returns:

  • (Integer)

    Role ID for Director.



14
# File 'app/models/msip/ability.rb', line 14

ROLDIR    = 3

#ROLESArray<Array<String, Integer>>

Returns List of roles with their IDs.

Returns:

  • (Array<Array<String, Integer>>)

    List of roles with their IDs.



23
24
25
26
27
28
29
30
# File 'app/models/msip/ability.rb', line 23

ROLES = [
  ["Administrador", ROLADMIN], # 1
  ["", 0], # 2
  ["Directivo", ROLDIR], # 3
  ["", 0], # 4
  ["Operador", ROLOPERADOR], # 5
  ["", 0], # 6
]

#ROLES_CAArray<String>

Returns List of role capabilities/descriptions.

Returns:

  • (Array<String>)

    List of role capabilities/descriptions.



34
35
36
37
38
39
40
41
42
43
44
# File 'app/models/msip/ability.rb', line 34

ROLES_CA = [
  "Crear copias de respaldo cifradas. " \
    "Administrar usuarios. " \
    "Administrar tablas básicas. ",
  "", # 2
  "", # 3
  "", # 4
  "", # 5
  "", # 6
  "", # 7
]

#ROLOPERADORInteger

Returns Role ID for Operator/Analyst.

Returns:

  • (Integer)

    Role ID for Operator/Analyst.



18
# File 'app/models/msip/ability.rb', line 18

ROLOPERADOR = ROLANALI = 5

Class Method Details

.lista_modelos_personaArray<Class>

Returns Lista de modelos relacionados con persona.

Returns:

  • (Array<Class>)

    Lista de modelos relacionados con persona



178
179
180
181
182
183
184
# File 'app/models/msip/ability.rb', line 178

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

.tb_clase(t) ⇒ Class

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

Parameters:

  • t (Array<String>)

    Tabla básica como pareja [Modulo, clase]

Returns:

  • (Class)

    Clase completa Modulo::Clase



156
157
158
159
160
161
162
163
# File 'app/models/msip/ability.rb', line 156

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) ⇒ String

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

Parameters:

  • t (Array<String>)

    Tabla básica como pareja [Modulo, clase]

Returns:

  • (String)

    Nombre de tabla modulo_clase



169
170
171
172
173
174
175
# File 'app/models/msip/ability.rb', line 169

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_noautoArray<Array<String>>

Arreglo de tablas básicas cuyo ID no es autoincremental.

Returns:



113
114
115
# File 'app/models/msip/ability.rb', line 113

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 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



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

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



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
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# File 'app/models/msip/ability.rb', line 192

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_idArray<Array<String>>

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

Returns:



132
133
134
# File 'app/models/msip/ability.rb', line 132

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.



100
101
102
# File 'app/models/msip/ability.rb', line 100

def tablasbasicas
  BASICAS_PROPIAS
end

#tablasbasicas_prioObject

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



148
149
150
# File 'app/models/msip/ability.rb', line 148

def tablasbasicas_prio
  BASICAS_PRIO
end