Skip to Content

Roles

Introduction

Roles are an effective way to restrict user depending on what he can or cannot do.

Structure of a role

{ "ROLE_MOD_INVOICE_LINE_ADD": "ROLE_MOD_INVOICE_LINE_ADD" }

Example of usage in app

Because they aren’t often updated, it’s better to store them in localstorage

In your hooks (Eg. GetRoles)

  • Create a function to get the list of user’s roles
    • Get the list of roles from localstorage
    • If there is no roles in localstorage, get the list roles of the specific user from API Link : open-api/v3/users/logged_user_roles/get

Example :

const GetRoles = async () => { let roles = {}; if (typeof window !== "undefined" && localStorage.roles) { roles = JSON.parse(localStorage.roles); } if (!roles || roles.length === 0) { roles = await fetchRoles(); localStorage.roles = JSON.stringify(roles); } return roles; }

Create a RolesEnum (in your utils directory)

  • Add all the roles that are needed in the app in that enum Example :
export enum ROLES_ENUM { ROLE_MOD_INVOICE_DISTRIBUTIONTYPE_DROPDOWN = "ROLE_MOD_INVOICE_DISTRIBUTIONTYPE_DROPDOWN", ROLE_MOD_INVOICE_TYPE_DROPDOWN = "ROLE_MOD_INVOICE_TYPE_DROPDOWN", ROLE_MOD_INVOICE_STATUS_DROPDOWN = "ROLE_MOD_INVOICE_STATUS_DROPDOWN", ROLE_MOD_INVOICE_UPDATE_PRICES = "ROLE_MOD_INVOICE_UPDATE_PRICES", ROLE_MOD_INVOICE_LINE_DROPDOWN = "ROLE_MOD_INVOICE_LINE_DROPDOWN", ROLE_MOD_INVOICE_LINE_ADD = "ROLE_MOD_INVOICE_LINE_ADD", ROLE_MOD_INVOICE_LINE_LISTING = "ROLE_MOD_INVOICE_LINE_LISTING", ROLE_MOD_INVOICE_PRINT = "ROLE_MOD_INVOICE_PRINT" }

In your component

  • Get the Roles list (from localstorage or API) Example :
const rolesArray = await GetRoles();
  • Get the roles enum
  • Then use the roles enum to verify if the user has the role or not to access ta data/field Example :
{arrayRoles && arrayRoles.ROLE_MOD_INVOICE_LINE_ADD === ROLES_ENUM.ROLE_MOD_INVOICE_LINE_ADD && ( <div>Invoice line add</div> ) }
Last updated on