Express Guard
Express Guard (express-guard) allows you to manage the requests made to your express server. It's built to be simple and has a powerful syntax.
With Express Guard, you only have to define allowed Features (such as 'viewPosts', 'removePost'...) for different user Roles (such as 'admin', 'postOwner').
Then when a request is made to your server, the middleware will check the corresponding access policy and return a result based on the user's permissions.
Getting started
1. Import Guard and define your roles
const Guard = ;const authenticated = 'authenticated'can: 'viewPost' 'editPost' 'logout'func: async {// Perform some logic to compute your role policy.const result = await Promise;if result === 'someresult'return true; // will have role 'authenticated'return false; // will not match this role}const guest = 'guest'can: 'login' // they can't do anything except loginfunc: async {// because we define roles one by one, we can use// a previously defined role to compute this one.// Here a guest is someone who is not authenticated.const res = await !authenticated;return res;}// Because we define roles one by one, we can use// a previously defined role to compute this one.const admin = 'admin'can: '*' // An admin can do everything!{ return unauthenticated; };
2. Add your roles to guard instance
const guard = ; // Add roles one by oneguardroles;guardroles; // Or using an arrayguardroles = authenticated admin;
3. Use guard middleware
const app = ;const router = express; // example 1// regarding our config both admin and authenticated users// have access to this route.router; // example 2// regarding our config, only admin has access to this routerouter;
Error handling
Since Guard acts as a middleware it calls next(err)
.
The err
argument is nothing but an Error()
instance.
This instance contains a property called isGuard
which is a Boolean. It can help you to catch the error in an error handler middleware as follow:
// Your error handler fileconst errorHandler = {if errisGuard// custom logic if error comes from Guard.// Yout want probably send a forbidden status// with a custom message. Something like:// res.status = 403;// res.send({ message: 'You can not access this ressource' });// Other stuff here.};