This example demonstrates how to set hierarchy, measure adn member level security in a data model programmatically.
The example uses API authentication driven from JavaScript. See Authentication APIs for alternatives.
var pyramidURL = "http://mysite.com/api3/";
let token = callApi("authentication/authenticateUser",{
"userName":"adminUser",
"password":"abc123!"},
"",false);
log("got token "+token);
let databaseId = database[0].itemId
let model= callApi("dataSources/findModelConnection",{
"serverSearchCriteria":{
"searchValue":"Pyramid IMDB"
},
"databaseSearchCriteria":{
"searchValue":"PyramidDemo"
},
"modelSearchCriteria":{
"searchValue":"PyramidDemo"
}
},token);
let modelId = model[0].modelId
let role= callApi("access/findRoles",{
"searchValue":"role 1"
},token);
let roleId = role[0].roleId
let addMembersSecurityToModel= callApi("dataSources/addMembersSecurity",{
"modelId":modelId,
"roleId":roleId,
"enableMode": true,
"hierarchyUniqueName": "[Date].[year]",
"members":["2009", "2010"]
},token);
let addMembersSecurityToModel= callApi("dataSources/addMembersSecurity",{
"modelId":modelId,
"roleId":roleId,
"enableMode": true,
"hierarchyUniqueName": "[Geography].[Country]",
"script":"NonEmpty([Geography].[Country].AllMembers, {StrToMember([Security].[User],UserName())})"
},token);
let addMembersSecurityToModel= callApi("dataSources/addMembersSecurity",{
"modelId":modelId,
"roleId":roleId,
"enableMode": true,
"hierarchyUniqueName": "[Security].[User]",
"script":"StrToMember([Org].[UserIds],UserName())"
},token);
let addHierarchySecurityToModel= callApi("dataSources/addHierarchySecurity",{
"modelId":modelId,
"roleId":roleId,
"enableMode": false,
"uniqueNames": ["[Customer].[State]"]
},token);
let addMeasureSecurityToModel= callApi("dataSources/addMeasureSecurity",{
"modelId":modelId,
"roleId":roleId,
"enableMode": true,
"uniqueNames": ["[measures].[Cost]"]
},token);
function log(msg){
document.write(msg);
console.log(msg);
}
function callApi(path,data,token="",parseResult=true){
var xhttp = new XMLHttpRequest();
xhttp.open("POST", pyramidURL+path, false);
xhttp.setRequestHeader("paToken",token)
xhttp.send(JSON.stringify(data));
if(parseResult){
return JSON.parse(xhttp.responseText);
}else{
return xhttp.responseText;
}
}