Skip to main content

Ugla Rules

Version

version

Instalando

Para instalar, ececute no terminal:

npm i ugla-rules

Em seguida, importe o module ao app.module.ts:

path/src/app/app.module.ts
UglaRulesModule.forRoot({ acronym: APPLICATION })

Em seguida, no app.component.ts é necessário invocar a função createApplication que armazenará todas as applications, features e operations do usuário:

path/src/app/app.component.ts
constructor(
private ugla: UglaService,
private rules: UglaRulesService) {
rules.createRules(this.currentUser.applications);
}
Importante

É necessário passar o array applications que é recebido no token da JWT.

Definando a aplicação

Para definir a aplicação, é preciso no forRoot passar o Acronym da aplicação:

path/src/app/app.module.ts
UglaRulesModule.forRoot({ acronym: 'EXPENSE' })

Definindo a feature

No TS do componente, é necessário especificar qual a feature está sendo trabalhada, deve ser passado o acronym. Essa informação será usada pelas diretivas para identificar se determinado operador está ativo ou não:

path/src/app/app.module.ts
constructor(private rules: UglaRulesService) {
rules.setFeature('INT');
}
Importante

Informe o acronym da feature. As features podem ser páginas ou mesmo componentes dentro de páginas.

Aplicando operadores

Existem duas maneiras basicas de aplicar um operador: usando a diretiva e usando o serviço:

Diretivas

DiretivaAtributoFuncionalidade
ViewuglVwExibe conteúdo se usuário tem permissão de visualizar
EdituglEdExibe conteúdo se usuário tem permissão de editar
CreateuglCrExibe conteúdo se usuário tem permissão de criar
DeleteuglDeExibe conteúdo se usuário tem permissão de deletar

Exemplo prático

<button (click)="createUser()" uglCr>Cadastrar novo usuário</button>
<table uglVw>
<tr>
<td>Lorem Ipsum</td>
<td>Lorem Ipsum</td>
<td>Lorem Ipsum</td>
<td>
<a href="/edit" uglEd>Editar</a>
<a href="/delete" uglDe>Delete</a>
</td>
<tr>
</table>

Service

O service retorna se o usuário tem as devidas permissões da seguinte maneira:

hasVw: boolean;
hasEd: boolean;
hasCr: boolean;
hasDe: boolean;

constructor(private rules: UglaRulesService) {
rules.setFeature('INT');
this.hasVw = rules.vw();
this.hasEd = rules.ed();
this.hasCr = rules.cr();
this.hasDe = rules.de();
}
Importante

Note que antes foi necessário indicar qual feature estou associando ao componente.

Operadores de outras features

Caso queira, dentro de um componente verificar a permissão em outra feature, também é possível: As funções vw(), ed(), cr() e de() possuem um atributo opcional feature, onde recebe o acronym da feature e valida.

hasClrVw: boolean; //View da feature CLR;

constructor(private rules: UglaRulesService) {
rules.setFeature('INT'); // feature original do componente
this.hasClrVw = rules.vw('CLR'); // outra feature
}
Importante

Neste caso, o vw('CLR') vai trazer a permissão da feature CLR para a operação VIEW, mas isso não impedirá que vw(), ed(), cr() e de() continuem trazendo os dados referente a feature indicada no setFeature().

Aplicando ao menu Ugla

No componente onde o menu for aplicado, será necessário criar o menu dentro do OnInit()

header = new Header('Ugla', './assets/imgs/logo.png', 'home', true);
people = new People('Jack Connor', 'jack.connor@ugla.dev', './assets/imgs/people.png');
menu: Menu;

constructor(private rules: UglaRulesService) {}

ngOnInit() {
this.header.people = this.people;
this.createMenu();
this.header.menu = this.menu;
this.ugla.headerShadow = true;
this.hasDelete = this.rules.delete();
this.ugla.hasToolBar();
}

createMenu() {
this.menu = new Menu([
new MenuItem('INT Feature', '/int', this.rules.vw('INT')),
new MenuItem('CLI Feature', '/cli', this.rules.vw('CLI')),
]);
}