models: move RoleMapping def into its own files
This commit is contained in:
parent
7c01d59d80
commit
e9c86163aa
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
* The `RoleMapping` model extends from the built in `loopback.Model` type.
|
||||||
|
*
|
||||||
|
* @property {String} id Generated ID.
|
||||||
|
* @property {String} name Name of the role.
|
||||||
|
* @property {String} Description Text description.
|
||||||
|
*
|
||||||
|
* @class RoleMapping
|
||||||
|
* @inherits {PersistedModel}
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = function(RoleMapping) {
|
||||||
|
// Principal types
|
||||||
|
RoleMapping.USER = 'USER';
|
||||||
|
RoleMapping.APP = RoleMapping.APPLICATION = 'APP';
|
||||||
|
RoleMapping.ROLE = 'ROLE';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the application principal
|
||||||
|
* @callback {Function} callback
|
||||||
|
* @param {Error} err
|
||||||
|
* @param {Application} application
|
||||||
|
*/
|
||||||
|
RoleMapping.prototype.application = function (callback) {
|
||||||
|
if (this.principalType === RoleMapping.APPLICATION) {
|
||||||
|
var applicationModel = this.constructor.Application
|
||||||
|
|| loopback.getModelByType(loopback.Application);
|
||||||
|
applicationModel.findById(this.principalId, callback);
|
||||||
|
} else {
|
||||||
|
process.nextTick(function () {
|
||||||
|
callback && callback(null, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the user principal
|
||||||
|
* @callback {Function} callback
|
||||||
|
* @param {Error} err
|
||||||
|
* @param {User} user
|
||||||
|
*/
|
||||||
|
RoleMapping.prototype.user = function (callback) {
|
||||||
|
if (this.principalType === RoleMapping.USER) {
|
||||||
|
var userModel = this.constructor.User
|
||||||
|
|| loopback.getModelByType(loopback.User);
|
||||||
|
userModel.findById(this.principalId, callback);
|
||||||
|
} else {
|
||||||
|
process.nextTick(function () {
|
||||||
|
callback && callback(null, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the child role principal
|
||||||
|
* @callback {Function} callback
|
||||||
|
* @param {Error} err
|
||||||
|
* @param {User} childUser
|
||||||
|
*/
|
||||||
|
RoleMapping.prototype.childRole = function (callback) {
|
||||||
|
if (this.principalType === RoleMapping.ROLE) {
|
||||||
|
var roleModel = this.constructor.Role || loopback.getModelByType(Role);
|
||||||
|
roleModel.findById(this.principalId, callback);
|
||||||
|
} else {
|
||||||
|
process.nextTick(function () {
|
||||||
|
callback && callback(null, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"name": "RoleMapping",
|
||||||
|
"description": "Map principals to roles",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"id": true,
|
||||||
|
"generated": true
|
||||||
|
},
|
||||||
|
"principalType": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The principal type, such as user, application, or role"
|
||||||
|
},
|
||||||
|
"principalId": "string"
|
||||||
|
},
|
||||||
|
"relations": {
|
||||||
|
"role": {
|
||||||
|
"type": "belongsTo",
|
||||||
|
"model": "Role",
|
||||||
|
"foreignKey": "roleId"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,94 +16,6 @@ var RoleSchema = {
|
||||||
modified: {type: Date, default: Date}
|
modified: {type: Date, default: Date}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
|
||||||
* Map principals to roles
|
|
||||||
*/
|
|
||||||
var RoleMappingSchema = {
|
|
||||||
id: {type: String, id: true, generated: true}, // Id
|
|
||||||
// roleId: String, // The role id, to be injected by the belongsTo relation
|
|
||||||
principalType: String, // The principal type, such as user, application, or role
|
|
||||||
principalId: String // The principal id
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The `RoleMapping` model extends from the built in `loopback.Model` type.
|
|
||||||
*
|
|
||||||
* @class
|
|
||||||
* @property {String} id Generated ID.
|
|
||||||
* @property {String} name Name of the role.
|
|
||||||
* @property {String} Description Text description.
|
|
||||||
* @inherits {Model}
|
|
||||||
*/
|
|
||||||
|
|
||||||
var RoleMapping = loopback.createModel('RoleMapping', RoleMappingSchema, {
|
|
||||||
relations: {
|
|
||||||
role: {
|
|
||||||
type: 'belongsTo',
|
|
||||||
model: 'Role',
|
|
||||||
foreignKey: 'roleId'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Principal types
|
|
||||||
RoleMapping.USER = 'USER';
|
|
||||||
RoleMapping.APP = RoleMapping.APPLICATION = 'APP';
|
|
||||||
RoleMapping.ROLE = 'ROLE';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the application principal
|
|
||||||
* @callback {Function} callback
|
|
||||||
* @param {Error} err
|
|
||||||
* @param {Application} application
|
|
||||||
*/
|
|
||||||
RoleMapping.prototype.application = function (callback) {
|
|
||||||
if (this.principalType === RoleMapping.APPLICATION) {
|
|
||||||
var applicationModel = this.constructor.Application
|
|
||||||
|| loopback.getModelByType(loopback.Application);
|
|
||||||
applicationModel.findById(this.principalId, callback);
|
|
||||||
} else {
|
|
||||||
process.nextTick(function () {
|
|
||||||
callback && callback(null, null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the user principal
|
|
||||||
* @callback {Function} callback
|
|
||||||
* @param {Error} err
|
|
||||||
* @param {User} user
|
|
||||||
*/
|
|
||||||
RoleMapping.prototype.user = function (callback) {
|
|
||||||
if (this.principalType === RoleMapping.USER) {
|
|
||||||
var userModel = this.constructor.User
|
|
||||||
|| loopback.getModelByType(loopback.User);
|
|
||||||
userModel.findById(this.principalId, callback);
|
|
||||||
} else {
|
|
||||||
process.nextTick(function () {
|
|
||||||
callback && callback(null, null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the child role principal
|
|
||||||
* @callback {Function} callback
|
|
||||||
* @param {Error} err
|
|
||||||
* @param {User} childUser
|
|
||||||
*/
|
|
||||||
RoleMapping.prototype.childRole = function (callback) {
|
|
||||||
if (this.principalType === RoleMapping.ROLE) {
|
|
||||||
var roleModel = this.constructor.Role || loopback.getModelByType(Role);
|
|
||||||
roleModel.findById(this.principalId, callback);
|
|
||||||
} else {
|
|
||||||
process.nextTick(function () {
|
|
||||||
callback && callback(null, null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Role Model
|
* The Role Model
|
||||||
* @class
|
* @class
|
||||||
|
@ -118,6 +30,9 @@ var Role = loopback.createModel('Role', RoleSchema, {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var RoleMapping = loopback.RoleMapping;
|
||||||
|
assert(RoleMapping, 'RoleMapping model must be defined before Role model');
|
||||||
|
|
||||||
// Set up the connection to users/applications/roles once the model
|
// Set up the connection to users/applications/roles once the model
|
||||||
Role.once('dataSourceAttached', function () {
|
Role.once('dataSourceAttached', function () {
|
||||||
var roleMappingModel = this.RoleMapping || loopback.getModelByType(RoleMapping);
|
var roleMappingModel = this.RoleMapping || loopback.getModelByType(RoleMapping);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
"common/models/scope.js",
|
"common/models/scope.js",
|
||||||
"common/models/application.js",
|
"common/models/application.js",
|
||||||
"common/models/email.js",
|
"common/models/email.js",
|
||||||
|
"common/models/role-mapping.js",
|
||||||
"common/models/role.js",
|
"common/models/role.js",
|
||||||
"common/models/user.js",
|
"common/models/user.js",
|
||||||
"common/models/change.js"
|
"common/models/change.js"
|
||||||
|
|
|
@ -13,8 +13,11 @@ module.exports = function(loopback) {
|
||||||
require('../common/models/access-token.json'),
|
require('../common/models/access-token.json'),
|
||||||
require('../common/models/access-token.js'));
|
require('../common/models/access-token.js'));
|
||||||
|
|
||||||
|
loopback.RoleMapping = createModel(
|
||||||
|
require('../common/models/role-mapping.json'),
|
||||||
|
require('../common/models/role-mapping.js'));
|
||||||
|
|
||||||
loopback.Role = require('../common/models/role').Role;
|
loopback.Role = require('../common/models/role').Role;
|
||||||
loopback.RoleMapping = require('../common/models/role').RoleMapping;
|
|
||||||
|
|
||||||
loopback.ACL = createModel(
|
loopback.ACL = createModel(
|
||||||
require('../common/models/acl.json'),
|
require('../common/models/acl.json'),
|
||||||
|
|
Loading…
Reference in New Issue