Class: Msip::Ability
- Inherits:
-
Object
- Object
- Msip::Ability
- 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
- .lista_modelos_persona ⇒ Object
-
.tb_clase(t) ⇒ Object
Recibe una tabla básica como pareja [Modulo, clase] y retorna clase completa Modulo::Clase.
-
.tb_modelo(t) ⇒ Object
Recibe una tabla básica como pareja [Modulo, clase] y retorna nombre de tabla modulo_clase.
Instance Method Summary collapse
-
#basicas_id_noauto ⇒ Object
Tablas básicas cuyo id no es autoincremental.
-
#inisec_tb ⇒ Object
Retorna diccionario con inicialización para secuencia de ids de algunas tablas básicas que comienzan en valores mayor a 100.
-
#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.
-
#nobasicas_indice_seq_con_id ⇒ Object
Tablas no básicas pero que tienen índice *_seq_id.
-
#tablasbasicas ⇒ Object
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.
-
#tablasbasicas_prio ⇒ Object
Tablas básicas que deben volcarse primero –por ser requeridas por otras básicas.
Class Method Details
.lista_modelos_persona ⇒ Object
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_noauto ⇒ Object
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_tb ⇒ Object
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
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 232 233 234 235 236 237 238 239 |
# 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, Msip::Orgsocial, Msip::OrgsocialPersona, Msip::Solicitud, ]) can([:new, :create, :read, :update], Msip::Ability::lista_modelos_persona) 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, Msip::Grupoper, Msip::Orgsocial, Msip::OrgsocialPersona, Msip::Respaldo7z, Msip::Solicitud, Msip::Tema, Msip::Ubicacion, Msip::Ubicacionpre, ::Usuario, ]) can(:manage, Msip::Ability::lista_modelos_persona) can(:manage, :tablasbasicas) tablasbasicas.each do |t| c = Ability.tb_clase(t) can(:manage, c) end end end end |
#nobasicas_indice_seq_con_id ⇒ Object
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 |
#tablasbasicas ⇒ Object
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_prio ⇒ Object
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 |