Foros de discusión

Programmatisches setzen von Permissions

N. H., modificado hace 9 años.

Programmatisches setzen von Permissions

Junior Member Mensajes: 71 Fecha de incorporación: 14/11/13 Mensajes recientes
Guten Morgen zusammen,

ich würde gerne eine neue Seite anlegen in meiner Site und ihr programmatisch Berechtigungen mitgeben. Die Seite lege ich mit folgendem Befehl an

Layout admin = LayoutServiceUtil.addLayout(group.getGroupId(), true, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, "Admin", "Admin", "Admin", LayoutConstants.TYPE_PORTLET, false, "/admin", serviceContext);


Das klappt auch wunderbar. Nun würde ich diese neue Seite gerne mit den Permissions ausstatten das nur Site Administratoren diese Seite sehen dürfen der Rest nicht

Ich habe folgende Befehle ausgeführt

Role userRole = RoleLocalServiceUtil.getRole(companyId, "Site Administrator");
Role userRoleMember = RoleLocalServiceUtil.getRole(companyId, "Site Member");

ResourcePermissionServiceUtil.setIndividualResourcePermissions(group.getGroupId(),
				group.getCompanyId(), Layout.class.getName(), String.valueOf(tmp.getPrimaryKey()),
				userRole.getRoleId(), new String[] { ActionKeys.VIEW });
				ResourcePermissionServiceUtil.removeResourcePermission(group.getGroupId(), group.getCompanyId(), Layout.class.getName(), ResourceConstants.SCOPE_GROUP, String.valueOf(tmp.getPrimaryKey()), userRoleMember.getRoleId(),  ActionKeys.VIEW );
LayoutLocalServiceUtil.updateLayout(tmp);


Leider scheint das nicht zu funktionieren was mache ich falsch ? Des Weiteren habe ich folgende Abfrage gemacht


List <layout> layouts = LayoutServiceUtil.getLayouts(group.getGroupId(), true);
</layout>


In layouts sind nun alle Seiten meiner Site zurückgegeben worden richtig ? Nun habe ich hierrüber eine Schleife laufen lassen um genau die Admin Seite zu finden


for(int i = 0;i<layouts.size();i++){ layout tmp="layouts.get(i);" if(tmp.getname(locale.germany).equals("admin")){ < code></layouts.size();i++){>
<br><br>Was ich noch nicht ganz verstehe warum ich Locale.GERMANY angeben muss. Mit tmp.getName().equals("Admin") hat es nicht funktioniert. <br><br><br>Ich freue mich auf eure Antworten <img alt="emoticon" src="@theme_images_path@/emoticons/happy.gif"><br>Viele Grüße,<br>N.H.
thumbnail
Torsten Rademacher, modificado hace 7 años.

RE: Programmatisches setzen von Permissions

New Member Mensajes: 5 Fecha de incorporación: 8/10/13 Mensajes recientes
N. H.:

Leider scheint das nicht zu funktionieren was mache ich falsch ?


Der Code an sich wirkt auf mich zumindest mal nicht falsch.
Allerdings hat die Rolle Site Member per default eine View-Berechtigung für "LayoutPrototype".
Das kannst du in der portal-impl/src/resource-actions/portal.xml sehen:


	<model-resource>
		<model-name>com.liferay.portal.model.LayoutPrototype</model-name>
...
		<permissions>
...
			<site-member-defaults>
				<action-key>VIEW</action-key>
			</site-member-defaults>
...
		</permissions>
	</model-resource>


Diese wird z.B. bei privaten Seiten innerhalb einer Site gebraucht. Auch die Admin-Seite ist privat angelegt.
Vermutlich kannst du deshalb dem Site Member nicht die View-Berechtigung entziehen.

N. H.:

Was ich noch nicht ganz verstehe warum ich Locale.GERMANY angeben muss. Mit tmp.getName().equals("Admin") hat es nicht funktioniert.


Das kann ich dir erklären:
Der Name einer Seite kann mehrsprachig sein. Um dies abzufangen, wird in das name-Feld nicht einfach "Admin" geschrieben, sondern eine mithilfe von XML dargestelle Map<Locale, String>, z.B.:

<!--?xml version='1.0' encoding='UTF-8'?--><root available-locales="de_DE,en_US" default-locale="de_DE"><name language-id="de_DE">Admin</name><name language-id="en_US">Admin</name></root>


Rufst du also die Getter-Funktion ohne Locale-Parameter auf, erhälst du nicht nur den String "Admin", sondern genau den obigen XML-String. Auch wenn du nur eine Locale definiert hast, wird dennoch nicht der Inhalt von <Name language-id="de_DE"> ausgegeben.

Ich hoffe ich konnte damit etwas Klarheit schaffen.

Viele Grüße,
Torsten