(function(window)
{
var Gitana = window.Gitana;
Gitana.AbstractSelfableACLObject = Gitana.AbstractSelfableObject.extend(
/** @lends Gitana.AbstractSelfableACLObject.prototype */
{
/**
* @constructs
* @augments Gitana.AbstractSelfableObject
*
* @class Abstract base class for selfable ACL Gitana document objects.
*
* @param {Gitana} driver
* @param {Object} [object]
*/
constructor: function(driver, object)
{
// finally chain to parent prototype
this.base(driver, object);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// ACL METHODS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Retrieve full ACL and pass into chaining method.
*
* @chained this
*
* @param callback
*/
loadACL: function(callback)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/acl/list";
};
return this.chainGetResponse(this, uriFunction).then(function(response) {
callback.call(this, response);
});
},
/**
* Retrieve list of authorities and pass into chaining method.
*
* @chained this
*
* @param {Gitana.DomainPrincipal|String} principal the principal or the principal id
* @param callback
*/
listAuthorities: function(principal, callback)
{
var principalDomainQualifiedId = this.extractPrincipalDomainQualifiedId(principal);
var self = this;
var uriFunction = function()
{
return self.getUri() + "/acl?id=" + principalDomainQualifiedId;
};
return this.chainGetResponseRows(this, uriFunction).then(function(response) {
callback.call(this, response);
});
},
/**
* Checks whether the given principal has a granted authority for this object.
* This passes the result (true/false) to the chaining function.
*
* @chained this
*
* @param {Gitana.DomainPrincipal|String} principal the principal or the principal id
* @param {String} authorityId the id of the authority
* @param callback
*/
checkAuthority: function(principal, authorityId, callback)
{
var principalDomainQualifiedId = this.extractPrincipalDomainQualifiedId(principal);
var self = this;
var uriFunction = function()
{
return self.getUri() + "/authorities/" + authorityId + "/check?id=" + principalDomainQualifiedId;
};
return this.chainPostResponse(this, uriFunction).then(function(response) {
callback.call(this, response["check"]);
});
},
/**
* Grants an authority to a principal against this object.
*
* @chained this
*
* @param {Gitana.DomainPrincipal|String} principal the principal or the principal id
* @param {String} authorityId the id of the authority
*/
grantAuthority: function(principal, authorityId)
{
var principalDomainQualifiedId = this.extractPrincipalDomainQualifiedId(principal);
var self = this;
var uriFunction = function()
{
return self.getUri() + "/authorities/" + authorityId + "/grant?id=" + principalDomainQualifiedId;
};
return this.chainPostEmpty(null, uriFunction);
},
/**
* Revokes an authority from a principal against this object.
*
* @chained this
*
* @param {Gitana.DomainPrincipal|String} principal the principal or the principal id
* @param {String} authorityId the id of the authority
*/
revokeAuthority: function(principal, authorityId)
{
var principalDomainQualifiedId = this.extractPrincipalDomainQualifiedId(principal);
var self = this;
var uriFunction = function()
{
return self.getUri() + "/authorities/" + authorityId + "/revoke?id=" + principalDomainQualifiedId;
};
return this.chainPostEmpty(null, uriFunction);
},
/**
* Revokes all authorities for a principal against the server.
*
* @chained this
*
* @param {Gitana.Principal|String} principal the principal or the principal id
*/
revokeAllAuthorities: function(principal)
{
return this.revokeAuthority(principal, "all");
},
/**
* Loads the authority grants for a given set of principals.
*
* @chained this
*
* @param callback
*/
loadAuthorityGrants: function(principalIds, callback)
{
if (!principalIds)
{
principalIds = [];
}
var json = {
"principals": principalIds
};
return this.chainPostResponse(this, this.getUri() + "/authorities", {}, json).then(function(response) {
callback.call(this, response);
});
},
/**
* Checks whether the given principal has a permission against this object.
* This passes the result (true/false) to the chaining function.
*
* @chained this
*
* @param {Gitana.DomainPrincipal|String} principal the principal or the principal id
* @param {String} permissionId the id of the permission
* @param callback
*/
checkPermission: function(principal, permissionId, callback)
{
var principalDomainQualifiedId = this.extractPrincipalDomainQualifiedId(principal);
var uriFunction = function()
{
return self.getUri() + "/permissions/" + permissionId + "/check?id=" + principalDomainQualifiedId;
};
return this.chainPostResponse(this, uriFunction).then(function(response) {
callback.call(this, response["check"]);
});
}
//////////////////////////////////////////////////////////////////////////////////////////
//
// END OF ACL METHODS
//
//////////////////////////////////////////////////////////////////////////////////////////
});
})(window);