Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

baucis-decorator-auth

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

baucis-decorator-auth

Allows you to specify authentication parameters for properties within any `baucis` resource's `mongoose` schema and adds authentication routes.

  • 1.0.4
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2
Maintainers
1
Weekly downloads
 
Created
Source

baucis-decorator-auth

Allows you to specify authentication parameters for properties within any baucis resource's mongoose schema and adds authentication routes.

Install

npm install baucis-decorators baucis-decorator-auth --save

Usage

You'll need 5 properties for this. The main one specifies who is currently authenticated to the resource and should contain an auth field, which contains references to the other 4 properties by the keys password, enabler, designator, and resetter, as well as a roles key that should optionally contain different sets of Boolean values for the access control. It is probably easiest to just check out the example below.

Four endpoints are added, login, logout, reset-password, and set-password. The password reset functionality is a WIP as it needs to allow for custom emails. Also keep in mind that authentication and access control can work for any resource, not just users.

Following the example below, if some User has publicViewing set to false and POSTs the proper id (or name) and viewingPassword to /api/users/login, said User will be able to view the resource. Alternatively, the User will be able to view the resource if they are in the viewers list.

Example

controllers/User.js

var baucis = require('baucis');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var extend = require('deep-extend');
var ResourceProps = require('../props/Resource.js');
var ResourceController = require('../controllers/Resource.js');

var userUtils = require('../utils/user.js');
var UserProps = extend({}, ResourceProps);

UserProps.viewing = {
  type: [String], // should represent sessionId
  auth: {
    password: 'viewingPassword',
    enabler: 'publicViewing',
    designator: 'viewers',
    resetter: 'resetViewingPassword',
    roles: {
      enabled: {
        read   : true
      }
    }
  },
  reserved: true
};

UserProps.publicViewing = {
  type: Boolean,
  default: true
};

UserProps.viewingPassword = {
  type: String,
  select: false
};

UserProps.resetViewingPassword = {
  type: String,
  select: false
};

UserProps.viewers = {
  type: [{
    type: ObjectId,
    ref: 'User'
  }]
};

UserProps.editing = {
  type: [String], // should represent sessionId
  auth: {
    password: 'editingPassword',
    enabler: 'publicEditing',
    designator: 'editors',
    resetter: 'resetEditingPassword',
    roles: {
      enabled: {
        read   : true,
        write  : true,
        drop   : true
      },
      User: {
        create : true
      }
    }
  },
  reserved: true
};

UserProps.publicEditing = {
  type: Boolean,
  default: false
};

UserProps.editingPassword = {
  type: String,
  select: false
};

UserProps.resetEditingPassword = {
  type: String,
  select: false
};

UserProps.editors = {
  type: [{
    type: ObjectId,
    ref: 'User'
  }],
  init: function (req, res, next) {
    return [userUtils.getId(req, res, next)];
  }
};

var UserSchema = new Schema(UserProps);
var UserModel = mongoose.model('User', UserSchema);
var UserController = baucis.rest('User');

var decorators = require('baucis-decorators');

// decorate controller
decorators.add.call(UserController, [
  'baucis-decorator-auth',  // checks each property for any `auth` fields and adds functionality accordingly
  ResourceController        // `UserController` will inherit all of `ResourceController`'s decorators
]);

/**
 * Expose controller.
 */
module.exports = UserController;

Keywords

FAQs

Package last updated on 25 Jun 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc