express-acler
Version:
ACL manager for Express using ACLer
97 lines (67 loc) • 3.45 kB
Markdown

O express-acler é um middleware para o ExpressJS para utilização de ACL baseado no [acler](https://github.com/enniel/acler).
Para adicionar o `express-acler` no seu projeto:
```
npm install express-acler
```
Ou
```
yarn add express-acler
```
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 |
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.
```js
// 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:
```js
user = {
username: "Higo Ribeiro",
get roles() {
return ["moderator", { moderator: ["read", "write", "delete"] }];
},
get permissions() {
return ["write", "read"];
}
};
```
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`.
```js
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);
```
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](https://github.com/Rocketseat)