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:
Propriedade | Tipo | Default | Descrição |
---|
roles | string | user.roles | Caminho das roles do seu usuário |
permissions | string | user.permissions | Caminho das permissions do seu usuário |
errors.roles | string | You not allowed to this resource | Mensagem de erro apresentada ao usuário por não possuir a role necessária |
errors.permissions | string | You not allowed to this resource | Mensagem 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.
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")({
});
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.
- Fork it
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create new Pull Request
License
MIT © Rocketseat