Hi Тимофей,
We had the same requirement. You can try something like this, see below.
Use the TabDefiniton on your form tabs, and the FormDefiniton on the form
itself, or make it the default implementation. Then add roles and/groups nodes
to the tab definition and everything should work.
We made this the default behavior by defining these implementations as the
default ones in our module.xml file, see the XML snippet below.
Hope this helps!
Regards from Vienna,
Richard
import info.magnolia.ui.form.definition.ConfiguredTabDefinition;
/**
* ConfiguredTabDefinition with additonal support for configuring roles and
groups which
* may use this tab.
* @author Richard Unger
*/
public class RoleAwareConfiguredTabDefinition extends ConfiguredTabDefinition {
protected String roles = null;
protected String groups = null;
public String getRoles() {
return roles;
}
/**
* @param roles comma-separted list of role-names which may use this tab
*/
public void setRoles(String roles) {
this.roles = roles;
}
public String getGroups() {
return groups;
}
/**
* @param groups comma-separted list of group-names which may use this
tab
*/
public void setGroups(String groups) {
this.groups = groups;
}
}
and:
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.iterators.FilterIterator;
import org.apache.commons.lang.StringUtils;
import ATKUtil;
import info.magnolia.ui.form.definition.ConfiguredFormDefinition;
import info.magnolia.ui.form.definition.TabDefinition;
/**
* FormDefinition implementation which extends ConfiguredFormDefinition with
* the ability to exclude/include form tabs by roles or groups of the current
user.
*
* To use:
* - in your form definition, configure a
* - set the property "roles" to a comma-seperated list of roles which may see
this tab
* - set the property "groups" to a comma-seperated list of groups which may
see this tab
* - if neither property has a value, the tab is visible to all users
*
* @author Richard Unger
*/
public class RoleAwareConfiguredFormDefintion extends ConfiguredFormDefinition {
@Override
public List<TabDefinition> getTabs() {
super.getTabs();
FilterIterator fi = new
FilterIterator(super.getTabs().iterator(), new Predicate(){
@Override
public boolean evaluate(Object tab) {
if (tab instanceof
RoleAwareConfiguredTabDefinition){
RoleAwareConfiguredTabDefinition ratab
= (RoleAwareConfiguredTabDefinition)tab;
if
(StringUtils.isEmpty(ratab.getRoles()) &&
StringUtils.isEmpty(ratab.getGroups()))
return true; // if no roles or
groups are configured, return true
boolean roleOk = false;
boolean groupOk = false;
if
(!StringUtils.isEmpty(ratab.getRoles()))
roleOk =
ATKUtil.currentUserHasAnyOfTheseRoles(ratab.getRoles());
if
(!StringUtils.isEmpty(ratab.getGroups()))
groupOk =
ATKUtil.currentUserHasAnyOfTheseGroups(ratab.getGroups());
return (roleOk || groupOk); // user
must have one of the groups or roles
}
// for other tab definition types just return
true
return true;
}
});
List<TabDefinition> filteredList = new
ArrayList<TabDefinition>();
while (fi.hasNext())
filteredList.add((TabDefinition) fi.next());
return filteredList;
}
}
And the helper methods from ATKUtil:
/**
* @param groups comma-separated list of groups
* @return true if the user is member of any of the groups, false
otherwise or if groups param is empty or null
*/
public static boolean currentUserHasAnyOfTheseGroups(String groups) {
if (StringUtils.isEmpty(groups))
return false;
User user = MgnlContext.getUser();
if (user!=null){
Collection<String> allGroups = user.getAllGroups();
for (String grp : groups.split(","))
if (allGroups.contains(grp))
return true;
}
return false;
}
/**
* @param roles comma-separated list of roles
* @return true if the user is member of any of the roles, false
otherwise or if roles param is empty or null
*/
public static boolean currentUserHasAnyOfTheseRoles(String roles) {
if (StringUtils.isEmpty(roles))
return false;
User user = MgnlContext.getUser();
if (user!=null){
Collection<String> allRoles = user.getAllRoles();
for (String role : roles.split(","))
if (allRoles.contains(role))
return true;
}
return false;
}
<type-mapping>
<type>info.magnolia.ui.form.definition.FormDefinition</type>
<implementation>x.y.z.RoleAwareConfiguredFormDefintion</implementation>
</type-mapping>
<type-mapping>
<type>info.magnolia.ui.form.definition.TabDefinition</type>
<implementation>x.y.z.RoleAwareConfiguredTabDefinition</implementation>
</type-mapping>
> -----Ursprüngliche Nachricht-----
> Von: [email protected]
> [mailto:user-list-owner@magnolia- cms.com] Im Auftrag von ???????
> ????????? (via Magnolia Forums)
> Gesendet: Dienstag, 27. Oktober 2015 15:12
> An: Magnolia User List
> Betreff: [magnolia-user] Allow access for dialog tabs
>
> Hi all.
>
> How to restrict access to tabs in dialog for some role?
> For example some-editor-role has access only to tabs A and B and have
> not to tab C.
>
> --
> Context is everything: http://forum.magnolia-
> cms.com/forum/thread.html?threadId=e0768358-9b11-4fbe-b16a-
> dc47f2673b95
>
>
> ----------------------------------------------------------------
> For list details, see http://www.magnolia-cms.com/community/mailing-
> lists.html
> Alternatively, use our forums: http://forum.magnolia-cms.com/ To
> unsubscribe, E-mail to: <[email protected]>
> ----------------------------------------------------------------
----------------------------------------------------------------
For list details, see http://www.magnolia-cms.com/community/mailing-lists.html
Alternatively, use our forums: http://forum.magnolia-cms.com/
To unsubscribe, E-mail to: <[email protected]>
----------------------------------------------------------------