In this example, since I need to interact with the Page Service, I need to create an instance of the Service:
Scope mScope = ServiceContext.getContext().getScope();
String scopeToUse = "defaultScope";
if (mScope != null){
scopeToUse = mScope.getName();
}if (mScope != null){
scopeToUse = mScope.getName();
PageService mPageService =
PageServiceFactory.createInstance(new PageServiceConfig((MDSSession)ADFContext.getCurrent().getMDSSessionAsObject(),
scopeToUse));
In this code fragment mScope contains the MDS based information of the particular group space. For example, in this example:
Scope[name=MyGroupSpace, guid=s6dbba758_c69f_4602_af4d_0834b84b3dde]
There are also 2 methods that will enable the extraction of useful information about the scope itself. One is the getName(), which return the group space name, and the other getGUID(), which returns the unique id of the group space location in MDS. These methods are great for deriving code, which can be use to pass as parameters of certain methods. Later on I will give an example of this to find the "path" of the page I want to add security on. Once I have established the page service, I can now create code to complete my use case:
mPageService.invalidateUserCache(getUserName());
String grantee = "martin";
String permisssions = "edit, view";
String initPath = "/oracle/webcenter/page/scopedMD/";
String testPath = initPath + mScope.getGUID() + Page2.jspx;
PageDef pageDef = mPageService.getPage(testPath);
// This get page in MDS at location:
String testPath = initPath + mScope.getGUID() + Page2.jspx;
PageDef pageDef = mPageService.getPage(testPath);
// This get page in MDS at location:
// oracle/webcenter/page/scopedMD/s6dbba758_c69f_4602_af4d_0834b84b3dde/Page2.jspx
mPageService.changePagePermission(CustomPagePermission.class.getCanonicalName(),
pageDef.getContentMRef(), true);
mPageService.changePagePermission(CustomPagePermission.class.getCanonicalName(),
pageDef.getContentMRef(), true);
mPageService.grantPagePermission(pageDef.getContentMRef(), grantee,
permissions);mPageService.saveChanges();
mPageService.invalidateScopeCache();
There are 2 steps actually in getting this to work correctly. The first step is that the page permission must be set to use "CustomPagePermission" page security. The default is "PagePermission". This is achieved by using the changePagePermisssion(). The next step is to set the new grants by using the grantPagePermission(). This method takes as its parameters, the page "path" (notice how I use the scope methods to help me create the page path), and grantee name (either a user or group, which has been defined in ldap provider, for example) , and the new permission(s), a String that has the values separated by commas. Valid values are: manage, update, delete, personalize, view.
After invoking the code, I can query the PageSecurity Manager to check my policy updates:
page policy oracle.webcenter.page.model.security.PagePolicy@137fa30
Page : /oracle/webcenter/page/scopedMD/s6dbba758_c69f_4602_af4d_0834b84b3dde/Page2.jspx
granted to martin
with permission(s) [edit, view]
Well there you have it. A simple example showing how easy it is to use the WebCenter APIs!