loopback/lib/models/acl.js

79 lines
1.8 KiB
JavaScript
Raw Normal View History

/**
Schema ACL options
Object level permissions, for example, an album owned by a user
Factors to be authorized against:
* model name: Album
* model instance properties: userId of the album, friends, shared
* methods
* app and/or user ids/roles
** loggedIn
** roles
** userId
** appId
** none
** everyone
** relations: owner/friend/granted
Class level permissions, for example, Album
* model name: Album
* methods
2013-07-15 21:07:17 +00:00
URL/Route level permissions
* url pattern
* application id
* ip addresses
* http headers
2013-07-15 21:07:17 +00:00
Map to oAuth 2.0 scopes
2013-07-01 22:53:10 +00:00
*/
2013-10-28 17:44:05 +00:00
/*
var ACLEntrySchema = {
principal: String, // Application/User/Role
action: String, // READ/WRITE or method name
allowed: Boolean // Positive or negative
}
var ACLSchema = {
publicReadAccess: Boolean,
publicWriteAccess: Boolean,
permissions: [ACLEntrySchema],
created: Date,
modified: Date
}
var AccessLevel = [
NotAllowed: 'Not Allowed', // Disabled
// 'Allowed when Logged-in',
Owner: 'Allow to Object Owner',
Role: 'Users defined in a Role',
Related: 'Any User with a relationship to the object',
Authenticated: 'Allow to Any Logged In User',
'Open'
];
*/
var ACLSchema = {
model: String, // The model name
properties: [String], // A list of property names
methods: [String], // A list of methods
2013-10-28 17:44:05 +00:00
users: [String], // A list of users
roles: [String], // A list of roles
permission: {type: String, enum: ['Allow', 'Deny']}, // Allow/Deny
status: String, // Enabled/disabled
created: Date,
modified: Date
2013-10-28 17:44:05 +00:00
};
// readAccess, writeAccess --> public, userId, role
module.exports = function(dataSource) {
dataSource = dataSource || new require('loopback-datasource-juggler').ModelBuilder();
var ACL = dataSource.define('ACL', ACLSchema);
return ACL;
2013-10-28 17:44:05 +00:00
};