Função que retorna se o usuário tem acesso a filial em AdvPL

Olá pessoal…

Hoje vou mostrar uma rotina desenvolvida que retorna .T. ou .F. se o usuário tem acesso a uma filial.

AdvPL

AdvPL

Primeiramente quero agradecer ao Gabriel Cisneiro por ter ajudado na criação da lógica da rotina. Ela 3 parâmetros, o código do usuário (por exemplo, 000001), o código do Grupo de Empresas (por exemplo, 01) e o código da filial (por exemplo, 0101).

Abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zUsrFil
Função que valida se o usuário tem acesso a filial
@author Atilio
@since 20/01/2017
@version undefined
@type function
	@param cCodUsr, characters, Código do usuário pesquisado (por default, vem o código do usuário logado)
	@param cCodEmp, characters, Código da empresa / grupo de empresas (por default, vem o código da empresa / grupo atual)
	@param cCodFil, characters, Código da filial (por default, vem o código da filial atual)
	@example u_zUsrFil("000001", "01", "02")
	u_zUsrFil("000001", "01", "0201")
	@obs Função desenvolvida com ajuda de Gabriel Cisneiro
/*/

User Function zUsrFil(cCodUsr, cCodEmp, cCodFil)
	Local lRet      := .F.
	Local aUsuarios := AllUsers()
	Local aUsrAux   := {}
	Local nLinEnc   := 0
	Local nPosFil   := 0
	Default cCodUsr := RetCodUsr()
	Default cCodEmp := cEmpAnt
	Default cCodFil := cFilAnt
	
	//Encontra o usuário
	nLinEnc:= aScan(aUsuarios, {|x| x[1][1] == cCodUsr })
	
	//Caso encontre o usuário
	If nLinEnc > 0
		aUsrAux := aClone(aUsuarios[nLinEnc][2][6])
		
		//Agora procura pela empresa + filial nos acessos 
		nPosFil := aScan(aUsrAux, {|x| x == cCodEmp + cCodFil })
		
		//Se encontrou a filial ou tem acesso a todas, o retorno será verdadeiro
		If nPosFil > 0 .Or. "@" $ aUsrAux[1]
			lRet := .T.
		EndIf
	EndIf
	
Return lRet

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação