1.0.0 • Published 5 years ago

express-acler v1.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

npm.io

Overview

O express-acler é um middleware para o ExpressJS para utilização de ACL baseado no acler.

Installation

Para adicionar o express-acler no seu projeto:

npm install express-acler

Ou

yarn add express-acler

Configurations

Você pode fazer algumas alterações na configuração para adequar o express-acler a sua necessidade. Você tem as seguintes configurações:

PropriedadeTipoDefaultDescrição
rolesstringuser.rolesCaminho das roles do seu usuário
permissionsstringuser.permissionsCaminho das permissions do seu usuário
errors.rolesstringYou not allowed to this resourceMensagem de erro apresentada ao usuário por não possuir a role necessária
errors.permissionsstringYou not allowed to this resourceMensagem de erro apresentada ao usuário por não possuir a permission necessária

Important

O express-acler precisa que você insira o seu User em um middleware que o antecede, por padrão o usuário deve ser inserido no req.user e as roles e permissions devem ficar em req.user.roles e req.user.permissions respectivamente. Essa configuração pode ser alterada quando o express-acler for instanciado.

// userMiddleware.js
const User = require("../models/User");

module.exports = async (req, res, next) => {
  req.user = await User.findById(1);
  next();
};

O seu usuário deve ter um Array contendo as roles e as permissions e caso alguma role possua permissions ela deve vir como Object. Segue o exemplo da estrutura esperada:

user = {
  username: "Higo Ribeiro",
  get roles() {
    return ["moderator", { moderator: ["read", "write", "delete"] }];
  },
  get permissions() {
    return ["write", "read"];
  }
};

Permissions

Ao tratar das permissions o express-acler naturalmente pega aquelas definidas nas roles do User, seguindo o objeto acima apresentado suas permissões são write, read e delete. A delete foi automaticamente acrescentada as permissions pois é uma das atribuições do moderator.

Usage

const { is, can } = require("express-acler")();
const app = require("express")({
  /* ... configurations */
});

const userMiddleware = require("./userMiddleware");
const postController = require("./controllers/post");

app.use(userMiddleware());

app.use("/app/dashboard", is("administrator"));
app.get("/posts", can("read || read_private"), postController.index);

app.post("/post", is("moderator"), postController.post);

Contribute

Todas as contribuições são bem-vindas.

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

MIT © Rocketseat