:wrench: add eslint config file
1 file changed
tree: d5e0af1974818772055ace05857de916a83ab648
  1. test/
  2. .eslintrc.json
  3. .gitignore
  4. .travis.yml
  5. authz.js
  6. authz_model.conf
  7. authz_policy.csv
  8. LICENSE
  9. package-lock.json
  10. package.json
  11. README.md
README.md

Koa-Authz

Build Status codecov Go Report Card GoDoc Join the chat at https://gitter.im/gin-gonic/gin

Koa-Authz is an authorization middleware for Koa, it's based on https://github.com/casbin/node-casbin.

Installation

npm install koa-authz

Simple Example

const { Enforcer } = require('casbin')
const Koa = require('koa')
const app = new Koa()
const authz = require('koa-authz')

// response
app.use((ctx, next) => {
  const start = new Date()
  await next()
  console.log(new Date() - start)
})

// use authz middleware
app.use(authz({
  newEnforcer: async() => {
    // load the casbin model and policy from files, database is also supported.
    const enforcer = await Enforcer.newEnforcer("authz_model.conf", "authz_policy.csv")
    return enforcer
  }
}))

// reload routes
const router = require('koa-router')({prefix: '/user'})
router.get('/', (ctx) => {
  ctx.body = {name: 'Chalin', age: 26}
})
router.put('/', (ctx) => {
  ctx.body = {status: 'success'}
})
app.use(router.routes(), router.allowedMethods())

app.listen(3000)

Documentation

The authorization determines a request based on {subject, object, action}, which means what subject can perform what action on what object. In this plugin, the meanings are:

  1. subject: the logged-on user name
  2. object: the URL path for the web resource like “dataset1/item1”
  3. action: HTTP method like GET, POST, PUT, DELETE, or the high-level actions you defined like “read-file”, “write-blog”

For how to write authorization policy and other details, please refer to the Casbin's documentation.

Getting Help

License

This project is under MIT License. See the LICENSE file for the full license text.