> For the complete documentation index, see [llms.txt](https://angular-token.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://angular-token.gitbook.io/docs/multiple-user-types.md).

# Multiple User Types

An array of `UserType` can be passed in `AngularTokenOptions` at the root module with`.forRoot()`. The user type is selected during sign in and persists until sign out. `.currentUserType()` returns the currently logged in user.

### Example:

```javascript
this.tokenService.init({
  userTypes: [
    { name: 'ADMIN', path: 'admin' },
    { name: 'USER', path: 'user' }
  ]
});

this.tokenService.signIn({
  login:    'example@example.com',
  password: 'secretPassword',
  userType: 'ADMIN'
})

this.tokenService.currentUserType; // ADMIN
```

## Showing/Hiding Elements based on UserType

When wanting to show or hide certain elements based on the UserRole, the following directive can be used as guideline.

```javascript
import { Directive, Input, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
import { AngularTokenService } from 'angular-token';

@Directive({
  selector: '[ifInRole]'
})
export class IfInRoleDirective implements OnInit {
  @Input('ifInRole') role: string;

  constructor(private viewContainer: ViewContainerRef,
              private templateRef: TemplateRef<any>,
              private tokenService: AngularTokenService) {
  }

  ngOnInit(): void {
    if (this.role === this.tokenService.currentUserType) {
      this.viewContainer.createEmbeddedView(this.templateRef);
    } else {
      this.viewContainer.clear();
    }
  }
}
```

### Example:

```markup
<a routerLink="link1">Public link 1</a>
<a routerLink="link2">Public link 2</a>
<a *ifInRole="'user'" routerLink="private/link1">Private link 1</a>
<a *ifInRole="'admin'" routerLink="private/link2">Private link 2</a>
```
