UI access control
Patterns for controlling user access to UI components and application routes
Role Based Access Control
The patterns used for access control in React stem from this post that describes implementing RBAC using Auth0 and React. The general ida is that a component called Can
is supplied an action and component that carries out that action. Rules are established to determine what roles have permissions to carry out an action.
For example: <Can perform="the:action" yes={<YesComponent />} no={<NoComponent/>} />
Can component
In Moped, the Can
component is passed the action
, yes
component, and no
component. Can
then uses the useUser
hook to expose the user's current session and then retrieve the user's highest role. This role is used to determine what set of defined rules apply to the user and determine access.
The Can
component is used to restrict user access to UI components and also restrict access to the components that render upon visiting routes in the application.
Restricting routes
To restrict routes, the React Router v6 object-based routes in Moped are modified by adding a action
key to a route object. This action is added to the rules that determine the UI restrictions for users.
For route access, two groups are set:
Unprotected routes
Protected routes
In this pattern, routes are protected by default. To exclude protection, a route's path string must be added to the unprotectedRoutePaths
array.
Routes are protected by restricting the components rendered by a route using the Can
component. The route object action
value is passed to Can
along with the route's element
as the yes
prop and a redirect to the root route as the no
prop.
Last updated