Se parte de que se tiene activado el GAM en su propiedad Enable
Integrated Security = True
Y la propiedad Default Integrated Security = Authorization
Al tener esta ultima propiedad en autorización el gam se
encarga de agregar los objetos utilizados en Genexus a los permisos de la aplicación
La forma en que los agrega es poniéndoles _NombreDel
Evento
Ejemplo.- si tengo una transacción Menu agregara los siguientes permisos
menu_Execute (significa que puede ejecutar el objeto)
menu_Insert (permite insertar)
menu_Update (permite modificar)
menu_Delete (permite eliminar)
menu_FullControl (Permite
agregar todos los permisos anteriores)
Se cuenta con tres pasos para tener los permisos en
usuario
a) Primero debe existir el permiso en la aplicación
en
este punto en el caso de los menus principales que no llaman a un objeto deben
de darse de alta en los permisos de la aplicación usando las opciones de
agregar permisos a la aplicación.
b) Se debe agregar los permiso a los roles
c) Por último se debe agregar los roles al usuario
ahora
procederemos a crear una transacción Menu
con los campos necesarios para guardar los datos de las opciones que componen
al menú como se muestra en la figura siguiente
MenuIsHeader.- se utiliza para indicar que es un menú principal
pero que no va a llamar a ningún objeto para ejecutarse.
trim(MenuObject)+'_Execute' IF not MenuObject.isempty();
trim(MenuName)+'_Execute' IF
MenuObject.isempty();
MenuObjectNull.- se utiliza para indicar va llamar a un
objeto o no
MenuObject IF
MenuIsHeader=False
Se debe crear un subtipo con los siguientes atributos
MenuParentId
MenuParentName
De esta forma tenemos un menú recursivo
Hasta aquí ya tenemos la transacción menú para dar de alta
nuestras opciones de menú
Ahora en la master page se debe agregar el user control
de su preferencia para mostrar el menú
En este ejemplo usaremos
SmoothNavMenu
Agregamos
el user control SmoothNavMenu a nuestra master page como se muestra en la
figura
en la pestaña de eventos de nuestra master
page se debe agregar el código que muestra la imagen, se esta llamando en el
evento start el data provider que devuelve la SDT con los datos del menú que se
debe mostrar.
Ahora en el data provider se debe llenar de la siguiente
forma:
order MenuOrder
where MenuParentId = &MenuParentId or (&MenuParentId=0 and MenuParentId.IsNull() )
Where
GAMRepository.CheckPermission(MenuGAMObject)
{
Id = str(MenuId)
Title = MenuName
Description = MenuDescription
//Link = iif(MenuObjectNull.IsEmpty(),!"#",MenuObject+'.aspx')
//generador C#
Link = iif(MenuObjectNull.IsEmpty(),!"#",MenuObject) //generar java
Items =
SmoothNavMenuDP.udp(MenuId)
}
La siguiente instrucción GAMRepository.CheckPermission(MenuGAMObject)
Nos devuelve si tiene permisos el usuario
autentificado al objeto enviado como parámetro a la funcion
Asi
es como debe aparecer el menú del ejemplo
si usas otro user control solo debes hacer algunos cambios para llenar la SDT del menu, el principio de este ejemplo es el mismo para cualquier User Control de Menu
si quieres el ejemplo completo en xpz comenta esta entrada y dale en ++Google
Espero les sea de utilidad