Programmatisches setzen von PermissionsProgrammatisches setzen von Permissionshttps://liferay.dev/en/c/message_boards/find_thread?p_l_id=119785333&threadId=476109622024-03-29T02:04:02Z2024-03-29T02:04:02ZRE: Programmatisches setzen von PermissionsTorsten Rademacherhttps://liferay.dev/en/c/message_boards/find_message?p_l_id=119785333&messageId=820537252016-11-04T15:04:55Z2016-11-04T15:04:55Z<html><head></head><body><div class="quote-title">N. H.:</div><blockquote><br>Leider scheint das nicht zu funktionieren was mache ich falsch ?<br></blockquote><br><br>Der Code an sich wirkt auf mich zumindest mal nicht falsch.<br>Allerdings hat die Rolle Site Member per default eine View-Berechtigung für "LayoutPrototype".<br>Das kannst du in der <em>portal-impl/src/resource-actions/portal.xml</em> sehen:<br><br><pre><code>
<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>
</code></pre><br><br>Diese wird z.B. bei privaten Seiten innerhalb einer Site gebraucht. Auch die Admin-Seite ist privat angelegt.<br>Vermutlich kannst du deshalb dem Site Member nicht die View-Berechtigung entziehen.<br><br><div class="quote-title">N. H.:</div><blockquote><br>Was ich noch nicht ganz verstehe warum ich Locale.GERMANY angeben muss. Mit tmp.getName().equals("Admin") hat es nicht funktioniert. </blockquote><br><br>Das kann ich dir erklären:<br>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.:<br><pre><code>
<!--?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>
</code></pre><br><br>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.<br><br>Ich hoffe ich konnte damit etwas Klarheit schaffen.<br><br>Viele Grüße,<br>Torsten</body></html>Torsten Rademacher2016-11-04T15:04:55ZProgrammatisches setzen von PermissionsN. H.https://liferay.dev/en/c/message_boards/find_message?p_l_id=119785333&messageId=476109612015-01-13T07:08:46Z2015-01-13T07:08:46Z<html><head></head><body>Guten Morgen zusammen,<br><br>ich würde gerne eine neue Seite anlegen in meiner Site und ihr programmatisch Berechtigungen mitgeben. Die Seite lege ich mit folgendem Befehl an <br><br><pre><code>Layout admin = LayoutServiceUtil.addLayout(group.getGroupId(), true, LayoutConstants.DEFAULT_PARENT_LAYOUT_ID, "Admin", "Admin", "Admin", LayoutConstants.TYPE_PORTLET, false, "/admin", serviceContext);</code></pre><br><br>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<br><br>Ich habe folgende Befehle ausgeführt<br><pre><code>
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);
</code></pre><br><br>Leider scheint das nicht zu funktionieren was mache ich falsch ? Des Weiteren habe ich folgende Abfrage gemacht<br><br><pre><code>
List <layout> layouts = LayoutServiceUtil.getLayouts(group.getGroupId(), true);
</layout></code></pre><br><br>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<br><br><pre><code>
for(int i = 0;i<layouts.size();i++){ layout tmp="layouts.get(i);" if(tmp.getname(locale.germany).equals("admin")){ < code></layouts.size();i++){></code></pre><code><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"><b