0.1.0 • Published 6 years ago

@yacinthos/loopback-component-user-manager v0.1.0

Weekly downloads
-
License
ISC
Repository
github
Last release
6 years ago

loopback-component-user-manager

User manager components for Loopback.

Model relations

User Model

A User have one group

User belongsTo a Group

{
  "name": "user",
  "base": "User",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "firstname": {
      "type": "string",
      "required": true
    },
    "lastname": {
      "type": "string",
      "required": true
    },
    "photo": {
      "type": "string",
      "required": false
    }
  },
  "validations": [],
  "relations": {
    "accessTokens": {
      "type": "hasMany",
      "model": "accessToken",
      "foreignKey": "userId",
      "options": {
        "disableInclude": false
      }
    },
    "group": {
      "type": "belongsTo",
      "model": "group",
      "foreignKey": "groupId",
      "options": {
        "disableInclude": false
      }
    }
  },
  "acls": [
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW"
    }
  ],
  "methods": {}
}

Group Model

A user Group can have many roles

Group hasMany Roles

{
  "name": "group",
  "base": "PersistedModel",
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "id": {
      "type": "string",
      "id": true
    },
    "name": {
      "type": "string",
      "required": true
    },
    "description": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "roles": {
      "type": "hasMany",
      "model": "role",
      "foreignKey": "groupId",
      "through": "groupRoleMapping",
      "options": {
        "disableInclude": false
      }
    }
  },
  "acls": [],
  "methods": {}
}

Role Model

A Role can be use by many groups

Role hasMany Group

{
  "name": "role",
  "base": "Role",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {},
  "validations": [],
  "relations": {
    "principals": {
      "type": "hasMany",
      "model": "RoleMapping",
      "foreignKey": "roleId"
    },
    "groups": {
      "type": "hasMany",
      "model": "group",
      "foreignKey": "roleId",
      "through": "groupRoleMapping",
      "options": {
        "disableInclude": false
      }
    }
  },
  "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "WRITE",
      "principalType": "ROLE",
      "principalId": "$write_role",
      "permission": "ALLOW"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$read_role",
      "permission": "ALLOW"
    }
  ],
  "methods": {}
}

groupRoleMapping Model

groupRoleMapping is a through Relation Model for the Many to Many relation between Group and Roles

groupRoleMapping

{
  "name": "groupRoleMapping",
  "base": "PersistedModel",
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "id": {
      "type": "string",
      "id":true
    }
  },
  "validations": [],
  "relations": {
    "group": {
      "type": "belongsTo",
      "model": "group",
      "foreignKey": "groupId",
      "options": {
        "disableInclude": false
      }
    },
    "role": {
      "type": "belongsTo",
      "model": "role",
      "foreignKey": "roleId",
      "options": {
        "disableInclude": false
      }
    }
  },
  "acls": [],
  "methods": {}
}

Installation

$ npm install loopback-component-user-manager --save

Configuration

Unable loopback-component-user-manager

Add component configuration option in server/component-config.json.

"loopback-component-user-manager": {
    "userModel": "user",
    "roleModel":"role",
    "groupModel":"group"
  }
  • Options

userModel: must be the name of the user model

roleModel: must be the name of the role model

groupModel: must be the name of the group model

Setup models loopback-component-user-manager model source

  • Add model source loopback-component-user-manager/models in server/model-config.json under sources option.

  • Add user, group, role, groupRoleMapping models configuration in server/model-config.json

{
  ...,
  "_meta": {
      "sources": [
        ...,
        "loopback-component-user-manager/models",
        ...
      ],
      ...
  },
  "role": {
      "dataSource": "db",
      "public": true
   },
  "group": {
    "dataSource": "db",
    "public": true
  },
  "groupRoleMapping": {
    "dataSource": "db",
    "public": true
  },
  "ACL": {
    "dataSource": "db",
    "public": false
  },
  "RoleMapping": {
    "dataSource": "db",
    "public": false,
    "options": {
      "strictObjectIDCoercion": true
    }
  }
  ...
}

Extending models

You can extend loopback-component-user-manager built-in models by follow Loopback extending models tutorial.

After extending, change loopback-component-user-manager option according to your models