Artículo
· 11 hr atrás Lectura de 2 min

Manipulando configuraciones de seguridad programáticamente

Pregunta:

¿Cómo podéis crear, modificar, etc., configuraciones de seguridad como Usuarios y Roles programáticamente?

Respuesta:

Podéis usar las clases del paquete Security en el NAMESPACE %SYS. Por ejemplo Security.Roles o Security.Users.

Por supuesto, para llevar a cabo estas acciones, necesitaréis la autorización correspondiente.

Aquí tenéis un pequeño ejemplo usando Security.Roles:

 
 // Create a Role
%SYS>Set status = ##class(Security.Roles).Create("testRole","a test Role","%Development:U,%DB_USER:R")
 

// Creation was successful
%SYS>Write status
1

// Now lets examine the Role created
%SYS>Set status = ##class(Security.Roles).Get("testRole",.properties)  

// We got the properties correctly         
%SYS>Write status
1

// The properties were returned by reference
%SYS>ZWrite properties
properties("Description")="a test Role"
properties("GrantedRoles")=""
properties("Resources")="%DB_USER:R,%Development:U"
 

// Now we want to add another permission
%SYS>Set properties("Resources")=properties("Resources")_",%DB_SAMPLES:RW"
 

// And modify our Role
%SYS>Set status = ##class(Security.Roles).Modify("testRole",.properties)
 
%SYS>Write status
1

// Let's verify this worked
%SYS>Set status = ##class(Security.Roles).Get("testRole",.latestProperties)
 
%SYS>ZWrite latestProperties
latestProperties("Description")="a test Role"
latestProperties("GrantedRoles")=""
latestProperties("Resources")="%DB_SAMPLES:RW,%DB_USER:R,%Development:U"

Nota: Tened en cuenta que el comportamiento actual (a partir de la versión 2016.1) es que, si la lista de Recursos separada por comas incluye un elemento vacío (por ejemplo, 'aaa,,bbb'), la adición de recursos se detendrá en ese punto.

Este comportamiento ha sido registrado para que se examine si así lo deseáis, y en caso contrario, se corregirá.

 

Además, en la comunidad inglesa, @Evgeny Shvarov añadió:

"Sigue siendo útil con los años

Simplemente añado aquí el código para asignar un rol a un usuario:"

ClassMethod AddRoleToUser(user = "CSPSystem", role = "DB_USER_Read") As %Status
{

// Change to the %SYS namespace.
new $NAMESPACE
set $NAMESPACE="%SYS"
set status=##class(Security.Users).Get(user, .MyUserProps)

set $p(MyUserProps("Roles"),",",*)=role

set status=##class(Security.Users).Modify(user,.MyUserProps)



// Announce success.
if $$$ISOK(status) {

write !, "Roles for the user "_user_" were successfully modified."
}

Quit status

}
Comentarios (0)1
Inicie sesión o regístrese para continuar