Permission via API setzen
Author: wiegele
Publication Date: 4/2/2015 13:53
Hallo zusammen,
ich versuch über die Beanshell Console folgendes Script auszuführen, leider haue ich mir immer alle Berechtigungen weg.
Die Berechtigungen wurden über das CMS_INPUT_PERMISSION gesetzt und einige der gesetzten Berechtigungen möchte ich wieder wegnehmen.
Ich würde behaupten, zwischen setAllow und setMetaFormData müsste ich noch sicherstellen das die Änderungen in das DataForm(meta) geschrieben wird.
Server-Version: 5.0.606.65744
e.setLock(true, false);
meta=e.getMetaFormData();
perms=meta.get(context.getProject().getMasterLanguage(),"roles").get();
roles = perms.getAllowed("access");
roles.remove("RollenName");
perms.setAllowed("access",roles);
// roles hat noch die Werte die ich haben möchte
//nach setAllowed sind am meta Objekt alle Permissions weg.
//Hier muss ich noch etwas anderes machen , denn editot holen?
//Wenn ja wie?
e.setMetaFormData(meta);
e.save("Wiegele beanshell");
e.setLock(false, false);
Danke fürs lesen.
Tags: script
-
Author: wiegele - 4/15/2015 11:39
Hallo zusammen,
keiner eine Ahnung, ob ich etwas falsch mache oder es sich um einen Bug handelt?
0 -
Author: kohlbrecher - 4/16/2015 8:30
Hallo Dirk,
hilft dir vielleicht dieses Posting weiter?
Grüße
Jan
0 -
Author: wiegele - 4/16/2015 12:10
Hallo Jan,
ich sehe leider nicht, das mir das Posting weiterhelfen könnte
In dem Posting geht es um Redakteursberechtigungen, bei mir geht es um Berechtigungen für ein SAP Portal die über die CMS_INPUT_PERMISSION gesetzt werden.
Gruß Dirk
0 -
Author: kohlbrecher - 4/16/2015 14:17
Hallo Dirk,
Ok, ich sehe in deinem Skript erstmal keinen Fehler. Kannst du mal ausprobieren, ob du an den permissions etwas anderes setzen kannst und ob das ankommt? zb setInherited(true/false);
Grüße
Jan
0 -
Author: wiegele - 4/16/2015 15:09
Hallo Jan,
nein setInherited kann ich auf true oder false setzten, bringt nichts
e.setLock(true, false);
meta=e.getMetaFormData();
perms=meta.get(context.getProject().getMasterLanguage(),"roles").get();
perms.setInherited(true); oder perms.setInherited(false); bringen nichts
e.setMetaFormData(meta);
e.save("Wiegele beanshell");
e.setLock(false, false);
Gruß Dirk
0 -
Author: wiegele - 4/20/2015 10:05
Hallo Jan,
scheinbar habe ich etwas übersehen.
perms.setInherited(true); oder perms.setInherited(false); funktioniert doch.
e.setMetaFormData(meta);
e.save("Wiegele beanshell");
e.setLock(false, false);
Sobald ich versuche die Methode setAllowed zu verwenden sind die getAllowed Berechtigungen weg.
perms.setAllowed("access",roles);
Gruß Dirk
0 -
Author: wiegele - 4/20/2015 11:10
Hallo Jan,
ich denke den Fehler gefunden zu haben.
Mit perms.getAllowed("access"); geht leider das Präfix der Berechtigung verloren.
Präfix "/Docname1/Docname2/Docname3/"
Eigentliche Berechtigung "Berechtigung1"
"/Docname1/Docname2/Docname3/Berechtigung1"
Die Ausgabe von formdata liefert im Okay Fall:
<<TEMPLATECONTENT><CMS_VALUE name="roles"><LANG id="§" set="1"><PERMISSIONS document="documentName" inherit="0" priority="allow"><OPERATION deselected="" name="access" selected="/Docname1/Docname2/Docname3/Berechtigung1"/></PERMISSIONS></LANG></CMS_VALUE><CMS_VALUE name="fs_portal_cm_modified"><LANG id="§" set="0"/></CMS_VALUE><CMS_VALUE name="fs_portal_cm_contenttype"><LANG id="§" set="0"/></CMS_VALUE><CMS_VALUE name="fs_portal_mdkm_editor_id"><LANG id="§" set="0"/></CMS_VALUE><CMS_VALUE name="childCount"><LANG id="§" set="0"/></CMS_VALUE></TEMPLATECONTENT>>
In dem TreeSet stehen aber die Berechtigungen ohne Präfix.
roles = perms.getAllowed("access");
<[Berechtigung1]>
Nach dem Speichern, werden die Werte auch übernommen, passen aber nicht zu der Konfiguration vom CMS_INPUT_PERMISSION und somit sieht es aus als wären alle Berechtigungen gelöscht worden.
Sieht nach BUG aus.
getAllowed muss die richtigen Werte liefern.
Gruß Dirk
0 -
Author: marza - 5/12/2015 14:46
Hallo Dirk,
benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Jan und TechnicalSupport bereits geholfen?
In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.
Viele Grüße
Marian
0 -
Author: wiegele - 5/12/2015 14:57
Hallo zusammen,
danke an Herrn Hofmann, für die richtige Lösung.
Es ist in der Tat so, dass getAllowed lediglich die Berechtigungen OHNE den kompletten Pfad zurückliefert (=> works as specified).
Den Rest bekommt man über PermissionService.
Hier ein Beispiel, das in Ihrem Fall funktionieren sollte:
projectID = context.getProject().getId();
connection = context.getConnection();
project = connection.getProjectById(projectID);
userService = project.getUserService();
permServ = context.getConnection().getService("PermissionService");
permServ.getRoot("MeinDokument").getGroupById("meineRolle").getPath();
0
Vous devez vous connecter pour laisser un commentaire.
Commentaires
9 commentaires