diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java index 3b8f30545b9..dd05f5642de 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/components/DataRetrieverChainDefinition.java @@ -197,16 +197,16 @@ public interface DataRetrieverChainDefinition { * Combines {@link #startWith(Class, Class, String)} and {@link #endWith(Class, Class, Class, String)} by marking this * chain as complete with only this single step. */ - void startAndEndWith(Class> retrieverType, - Class retrievedDataType, String retrievedDataTypeMessageKey); + void startAndEndWith(Class> retrieverType, + Class retrievedDataType, String retrievedDataTypeMessageKey); /** * Combines {@link #startWith(Class, Class, Class, SerializableSettings, String) and * {@link #endWith(Class, Class, Class, Class, SerializableSettings, String) by marking this chain as complete with * only this single step. */ - void startAndEndWith( - Class> retrieverType, Class retrievedDataType, + void startAndEndWith( + Class> retrieverType, Class retrievedDataType, Class settingsType, SettingsType defaultSettings, String retrievedDataTypeMessageKey); diff --git a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java index 8cfffe3d90a..dd5b3465b7e 100644 --- a/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java +++ b/java/com.sap.sse.datamining/src/com/sap/sse/datamining/impl/components/SimpleDataRetrieverChainDefinition.java @@ -51,14 +51,14 @@ public class SimpleDataRetrieverChainDefinition implem } @Override - public void startAndEndWith(Class> retrieverType, - Class retrievedDataType, String retrievedDataTypeMessageKey) { + public void startAndEndWith(Class> retrieverType, + Class retrievedDataType, String retrievedDataTypeMessageKey) { startAndEndWith(retrieverType, retrievedDataType, /* settings type */ null, /* default settings */ null, retrievedDataTypeMessageKey); } @Override - public void startAndEndWith(Class> retrieverType, - Class retrievedDataType, Class settingsType, SettingsType defaultSettings, + public void startAndEndWith(Class> retrieverType, + Class retrievedDataType, Class settingsType, SettingsType defaultSettings, String retrievedDataTypeMessageKey) { startWith(retrieverType, retrievedDataType, settingsType, defaultSettings, retrievedDataTypeMessageKey); isComplete = true; diff --git a/java/com.sap.sse.security.datamining/resources/stringmessages/SecurityDataMining_StringMessages.properties b/java/com.sap.sse.security.datamining/resources/stringmessages/SecurityDataMining_StringMessages.properties index b9ea23a5ce2..ca04273b77f 100644 --- a/java/com.sap.sse.security.datamining/resources/stringmessages/SecurityDataMining_StringMessages.properties +++ b/java/com.sap.sse.security.datamining/resources/stringmessages/SecurityDataMining_StringMessages.properties @@ -1,11 +1,12 @@ +UserGroups=User Groups UserGroup=User Group -UserInUserGroup=User in User Group +UsersInUserGroup=Users in User Group SecurityChainForUsers=Users SecurityChainForUserGroups=User Groups -RoleInUserGroup=Role in User Group -RoleOfUserGroup=Role of User Group +RolesOfUserGroup=Role of User Group UserGroupName=User Group Name User=User +Users=Users RoleOfUserGroupName=Name of Role Implied by User Group RoleOfUserGroupForAll=Applies for all Users NumberOfPermissions=Number of Permissions @@ -19,4 +20,8 @@ PermissionString=Permission PermissionTypes=Permission for Types PermissionActions=Permission for Actions PermissionObjects=Permission for Objects -PermissionsOfUserInUserGroup=Permissions of User in User Groups \ No newline at end of file +PermissionsOfUsersInUserGroup=Permissions of Users in User Groups +SecurityChainForUsers=Users +NumberOfUsersInUserGroup=Number of users in User Group +ImpliesRoles=Implies Role(s) +NumberOfPreferences=Number of Preferences \ No newline at end of file diff --git a/java/com.sap.sse.security.datamining/resources/stringmessages/SecurityDataMining_StringMessages_de.properties b/java/com.sap.sse.security.datamining/resources/stringmessages/SecurityDataMining_StringMessages_de.properties index fa623073dcf..012ed4dd25e 100644 --- a/java/com.sap.sse.security.datamining/resources/stringmessages/SecurityDataMining_StringMessages_de.properties +++ b/java/com.sap.sse.security.datamining/resources/stringmessages/SecurityDataMining_StringMessages_de.properties @@ -1,11 +1,12 @@ +UserGroups=Benutzergruppen UserGroup=Benutzergruppe -UserInUserGroup=Benutzer in Benutzergruppe +UsersInUserGroup=Benutzer in Benutzergruppe SecurityChainForUsers=Benutzer SecurityChainForUserGroups=Benutzergruppen -RoleInUserGroup=Rolle in Benutzergruppe -RoleOfUserGroup=Rolle der Benutzergruppe +RolesOfUserGroup=Rolle der Benutzergruppe UserGroupName=Name der Benutzergruppe User=Benutzer +Users=Benutzer RoleOfUserGroupName=Name der von der Benutzergruppe implizierten Rolle RoleOfUserGroupForAll=Gilt für alle Benutzer NumberOfPermissions=Anzahl der Berechtigungen @@ -19,4 +20,8 @@ PermissionString=Berechtigung PermissionTypes=Berechtigung für Typen PermissionActions=Berechtigung für Aktionen PermissionObjects=Berechtigung für Objekte -PermissionsOfUserInUserGroup=Berechtigungen für Benutzer in Benutzergruppen \ No newline at end of file +PermissionsOfUsersInUserGroup=Berechtigungen für Benutzer in Benutzergruppen +SecurityChainForUsers=Benutzer +NumberOfUsersInUserGroup=Anzahl Benutzer in Benutzergruppe +ImpliesRoles=Impliziert Rolle(n) +NumberOfPreferences=Anzahl Präferenzen \ No newline at end of file diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/Activator.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/Activator.java index 4cedbbdf88b..6f832faeaaf 100644 --- a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/Activator.java +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/Activator.java @@ -13,8 +13,10 @@ import com.sap.sse.datamining.components.DataRetrieverChainDefinition; import com.sap.sse.datamining.impl.AbstractDataMiningActivator; import com.sap.sse.i18n.ResourceBundleStringMessages; import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl; -import com.sap.sse.security.datamining.data.HasPermissionsOfUserInUserGroupContext; +import com.sap.sse.security.datamining.data.HasPermissionOfUserContext; +import com.sap.sse.security.datamining.data.HasPermissionOfUserInUserGroupContext; import com.sap.sse.security.datamining.data.HasRoleOfUserGroupContext; +import com.sap.sse.security.datamining.data.HasUserContext; import com.sap.sse.security.datamining.data.HasUserGroupContext; import com.sap.sse.security.datamining.data.HasUserInUserGroupContext; import com.sap.sse.security.shared.impl.User; @@ -73,7 +75,9 @@ public class Activator extends AbstractDataMiningActivator { internalClasses.add(HasUserGroupContext.class); internalClasses.add(HasUserInUserGroupContext.class); internalClasses.add(HasRoleOfUserGroupContext.class); - internalClasses.add(HasPermissionsOfUserInUserGroupContext.class); + internalClasses.add(HasPermissionOfUserInUserGroupContext.class); + internalClasses.add(HasPermissionOfUserContext.class); + internalClasses.add(HasUserContext.class); return internalClasses; } diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/SecurityDataRetrievalChainDefinitions.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/SecurityDataRetrievalChainDefinitions.java index 19679a76bfc..f60ebbc8a5e 100644 --- a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/SecurityDataRetrievalChainDefinitions.java +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/SecurityDataRetrievalChainDefinitions.java @@ -10,8 +10,10 @@ import com.sap.sse.security.datamining.components.SecurityPermissionsOfUserInUse import com.sap.sse.security.datamining.components.SecurityRoleOfUserGroupRetrievalProcessor; import com.sap.sse.security.datamining.components.SecurityUserGroupRetrievalProcessor; import com.sap.sse.security.datamining.components.SecurityUserInUserGroupRetrievalProcessor; -import com.sap.sse.security.datamining.data.HasPermissionsOfUserInUserGroupContext; +import com.sap.sse.security.datamining.components.SecurityUserRetrievalProcessor; +import com.sap.sse.security.datamining.data.HasPermissionOfUserInUserGroupContext; import com.sap.sse.security.datamining.data.HasRoleOfUserGroupContext; +import com.sap.sse.security.datamining.data.HasUserContext; import com.sap.sse.security.datamining.data.HasUserGroupContext; import com.sap.sse.security.datamining.data.HasUserInUserGroupContext; @@ -31,23 +33,28 @@ public class SecurityDataRetrievalChainDefinitions { DataRetrieverChainDefinition userGroupRetriever = new SimpleDataRetrieverChainDefinition<>( SecurityService.class, HasUserGroupContext.class, "SecurityChainForUserGroups"); userGroupRetriever.startAndEndWith(SecurityUserGroupRetrievalProcessor.class, HasUserGroupContext.class, - "UserGroup"); + "UserGroups"); dataRetrieverChainDefinitions.add(userGroupRetriever); + DataRetrieverChainDefinition userRetriever = new SimpleDataRetrieverChainDefinition<>( + SecurityService.class, HasUserContext.class, "SecurityChainForUsers"); + userRetriever.startAndEndWith(SecurityUserRetrievalProcessor.class, HasUserContext.class, + "Users"); + dataRetrieverChainDefinitions.add(userRetriever); DataRetrieverChainDefinition userInUserGroupRetriever = new SimpleDataRetrieverChainDefinition<>( - userGroupRetriever, HasUserInUserGroupContext.class, "UserInUserGroup"); + userGroupRetriever, HasUserInUserGroupContext.class, "UsersInUserGroup"); userInUserGroupRetriever.endWith(SecurityUserGroupRetrievalProcessor.class, - SecurityUserInUserGroupRetrievalProcessor.class, HasUserInUserGroupContext.class, "UserInUserGroup"); + SecurityUserInUserGroupRetrievalProcessor.class, HasUserInUserGroupContext.class, "UsersInUserGroup"); dataRetrieverChainDefinitions.add(userInUserGroupRetriever); - DataRetrieverChainDefinition permissionsOfUserInUserGroupRetriever = new SimpleDataRetrieverChainDefinition<>( - userInUserGroupRetriever, HasPermissionsOfUserInUserGroupContext.class, "PermissionsOfUserInUserGroup"); + DataRetrieverChainDefinition permissionsOfUserInUserGroupRetriever = new SimpleDataRetrieverChainDefinition<>( + userInUserGroupRetriever, HasPermissionOfUserInUserGroupContext.class, "PermissionsOfUsersInUserGroup"); permissionsOfUserInUserGroupRetriever.endWith(SecurityUserInUserGroupRetrievalProcessor.class, SecurityPermissionsOfUserInUserGroupRetrievalProcessor.class, - HasPermissionsOfUserInUserGroupContext.class, "PermissionsOfUserInUserGroup"); + HasPermissionOfUserInUserGroupContext.class, "PermissionsOfUsersInUserGroup"); dataRetrieverChainDefinitions.add(permissionsOfUserInUserGroupRetriever); DataRetrieverChainDefinition roleOfUserGroupRetriever = new SimpleDataRetrieverChainDefinition<>( - userGroupRetriever, HasRoleOfUserGroupContext.class, "RoleOfUserGroup"); + userGroupRetriever, HasRoleOfUserGroupContext.class, "RolesOfUserGroup"); roleOfUserGroupRetriever.endWith(SecurityUserGroupRetrievalProcessor.class, - SecurityRoleOfUserGroupRetrievalProcessor.class, HasRoleOfUserGroupContext.class, "RoleInUserGroup"); + SecurityRoleOfUserGroupRetrievalProcessor.class, HasRoleOfUserGroupContext.class, "RolesOfUserGroup"); dataRetrieverChainDefinitions.add(roleOfUserGroupRetriever); } diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/AbstractSecurityPermissionsOfUserRetrievalProcessor.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/AbstractSecurityPermissionsOfUserRetrievalProcessor.java new file mode 100644 index 00000000000..fdf10f69ec6 --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/AbstractSecurityPermissionsOfUserRetrievalProcessor.java @@ -0,0 +1,37 @@ +package com.sap.sse.security.datamining.components; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ExecutorService; + +import com.sap.sse.datamining.components.Processor; +import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor; +import com.sap.sse.security.datamining.data.HasUserContext; +import com.sap.sse.security.datamining.data.HasPermissionContext; +import com.sap.sse.security.shared.WildcardPermission; + +public abstract class AbstractSecurityPermissionsOfUserRetrievalProcessor +extends AbstractRetrievalProcessor { + public AbstractSecurityPermissionsOfUserRetrievalProcessor(ExecutorService executor, Class hasUserContextSpecialization, + Class permissionWithContextSpecialization, + Collection> resultReceivers, int retrievalLevel, + String retrievedDataTypeMessageKey) { + super(hasUserContextSpecialization, permissionWithContextSpecialization, executor, resultReceivers, + retrievalLevel, retrievedDataTypeMessageKey); + } + + @Override + protected Iterable retrieveData(HUG element) { + final Set data = new HashSet<>(); + for (final WildcardPermission permission : element.getUser().getPermissions()) { + if (isAborted()) { + break; + } + data.add(createPermissionWithContext(element, permission)); + } + return data; + } + + protected abstract PWC createPermissionWithContext(HUG element, WildcardPermission permission); +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityPermissionsOfUserInUserGroupRetrievalProcessor.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityPermissionsOfUserInUserGroupRetrievalProcessor.java index a099a8cced2..73b1138dee6 100644 --- a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityPermissionsOfUserInUserGroupRetrievalProcessor.java +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityPermissionsOfUserInUserGroupRetrievalProcessor.java @@ -1,34 +1,25 @@ package com.sap.sse.security.datamining.components; import java.util.Collection; -import java.util.HashSet; -import java.util.Set; import java.util.concurrent.ExecutorService; import com.sap.sse.datamining.components.Processor; -import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor; -import com.sap.sse.security.datamining.data.HasPermissionsOfUserInUserGroupContext; +import com.sap.sse.security.datamining.data.HasPermissionOfUserInUserGroupContext; import com.sap.sse.security.datamining.data.HasUserInUserGroupContext; import com.sap.sse.security.datamining.data.impl.PermissionOfUserInUserGroupWithContext; import com.sap.sse.security.shared.WildcardPermission; -public class SecurityPermissionsOfUserInUserGroupRetrievalProcessor extends AbstractRetrievalProcessor { +public class SecurityPermissionsOfUserInUserGroupRetrievalProcessor extends AbstractSecurityPermissionsOfUserRetrievalProcessor { public SecurityPermissionsOfUserInUserGroupRetrievalProcessor(ExecutorService executor, - Collection> resultReceivers, int retrievalLevel, + Collection> resultReceivers, int retrievalLevel, String retrievedDataTypeMessageKey) { - super(HasUserInUserGroupContext.class, HasPermissionsOfUserInUserGroupContext.class, executor, resultReceivers, + super(executor, HasUserInUserGroupContext.class, HasPermissionOfUserInUserGroupContext.class, resultReceivers, retrievalLevel, retrievedDataTypeMessageKey); } @Override - protected Iterable retrieveData(HasUserInUserGroupContext element) { - final Set data = new HashSet<>(); - for (final WildcardPermission permission : element.getUser().getPermissions()) { - if (isAborted()) { - break; - } - data.add(new PermissionOfUserInUserGroupWithContext(element, permission)); - } - return data; + protected HasPermissionOfUserInUserGroupContext createPermissionWithContext(HasUserInUserGroupContext element, + WildcardPermission permission) { + return new PermissionOfUserInUserGroupWithContext(element, permission); } } diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityPermissionsOfUserRetrievalProcessor.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityPermissionsOfUserRetrievalProcessor.java new file mode 100644 index 00000000000..289397ab9de --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityPermissionsOfUserRetrievalProcessor.java @@ -0,0 +1,25 @@ +package com.sap.sse.security.datamining.components; + +import java.util.Collection; +import java.util.concurrent.ExecutorService; + +import com.sap.sse.datamining.components.Processor; +import com.sap.sse.security.datamining.data.HasPermissionOfUserContext; +import com.sap.sse.security.datamining.data.HasUserContext; +import com.sap.sse.security.datamining.data.impl.PermissionOfUserWithContext; +import com.sap.sse.security.shared.WildcardPermission; + +public class SecurityPermissionsOfUserRetrievalProcessor extends AbstractSecurityPermissionsOfUserRetrievalProcessor { + public SecurityPermissionsOfUserRetrievalProcessor(ExecutorService executor, + Collection> resultReceivers, int retrievalLevel, + String retrievedDataTypeMessageKey) { + super(executor, HasUserContext.class, HasPermissionOfUserContext.class, resultReceivers, + retrievalLevel, retrievedDataTypeMessageKey); + } + + @Override + protected HasPermissionOfUserContext createPermissionWithContext(HasUserContext element, + WildcardPermission permission) { + return new PermissionOfUserWithContext(element, permission); + } +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityUserRetrievalProcessor.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityUserRetrievalProcessor.java new file mode 100644 index 00000000000..4ace3fb5a94 --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/components/SecurityUserRetrievalProcessor.java @@ -0,0 +1,36 @@ +package com.sap.sse.security.datamining.components; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ExecutorService; + +import com.sap.sse.datamining.components.Processor; +import com.sap.sse.datamining.impl.components.AbstractRetrievalProcessor; +import com.sap.sse.security.SecurityService; +import com.sap.sse.security.datamining.data.HasUserContext; +import com.sap.sse.security.datamining.data.impl.UserWithContext; +import com.sap.sse.security.shared.impl.User; + +public class SecurityUserRetrievalProcessor extends AbstractRetrievalProcessor { + public SecurityUserRetrievalProcessor(ExecutorService executor, + Collection> resultReceivers, int retrievalLevel, + String retrievedDataTypeMessageKey) { + super(SecurityService.class, HasUserContext.class, executor, resultReceivers, + retrievalLevel, retrievedDataTypeMessageKey); + } + + @Override + protected Iterable retrieveData(SecurityService securityService) { + final Set data = new HashSet<>(); + for (final User user : securityService.getUserList()) { + if (isAborted()) { + break; + } + if (securityService.hasCurrentUserReadPermission(user)) { + data.add(new UserWithContext(user, securityService)); + } + } + return data; + } +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionContext.java new file mode 100644 index 00000000000..f8917932a9a --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionContext.java @@ -0,0 +1,29 @@ +package com.sap.sse.security.datamining.data; + +import com.sap.sse.common.Util; +import com.sap.sse.datamining.annotations.Dimension; +import com.sap.sse.security.shared.WildcardPermission; + +public interface HasPermissionContext { + WildcardPermission getPermission(); + + @Dimension(messageKey="PermissionString", ordinal=0) + default String getPermissionString() { + return getPermission().toString(); + } + + @Dimension(messageKey="PermissionTypes", ordinal=1) + default String getPermissionTypes() { + return !getPermission().getParts().isEmpty() ? Util.joinStrings(",", getPermission().getParts().get(0)) : ""; + } + + @Dimension(messageKey="PermissionActions", ordinal=2) + default String getPermissionActions() { + return getPermission().getParts().size() > 1 ? Util.joinStrings(",", getPermission().getParts().get(1)) : ""; + } + + @Dimension(messageKey="PermissionObjects", ordinal=3) + default String getPermissionObjects() { + return getPermission().getParts().size() > 2 ? Util.joinStrings(",", getPermission().getParts().get(2)) : ""; + } +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionOfUserContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionOfUserContext.java new file mode 100644 index 00000000000..f23e5397d94 --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionOfUserContext.java @@ -0,0 +1,8 @@ +package com.sap.sse.security.datamining.data; + +import com.sap.sse.datamining.annotations.Connector; + +public interface HasPermissionOfUserContext extends HasPermissionContext { + @Connector + HasUserContext getUser(); +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionOfUserInUserGroupContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionOfUserInUserGroupContext.java new file mode 100644 index 00000000000..ff36f52643c --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionOfUserInUserGroupContext.java @@ -0,0 +1,8 @@ +package com.sap.sse.security.datamining.data; + +import com.sap.sse.datamining.annotations.Connector; + +public interface HasPermissionOfUserInUserGroupContext extends HasPermissionContext { + @Connector + HasUserInUserGroupContext getUserInUserGroupContext(); +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionsOfUserInUserGroupContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionsOfUserInUserGroupContext.java deleted file mode 100644 index ea577520a54..00000000000 --- a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasPermissionsOfUserInUserGroupContext.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.sap.sse.security.datamining.data; - -import com.sap.sse.datamining.annotations.Connector; -import com.sap.sse.datamining.annotations.Dimension; - -public interface HasPermissionsOfUserInUserGroupContext { - @Connector - HasUserInUserGroupContext getUserInUserGroupContext(); - - @Dimension(messageKey="PermissionString", ordinal=0) - String getPermissionString(); - - @Dimension(messageKey="PermissionTypes", ordinal=1) - String getPermissionTypes(); - - @Dimension(messageKey="PermissionActions", ordinal=2) - String getPermissionActions(); - - @Dimension(messageKey="PermissionObjects", ordinal=3) - String getPermissionObjects(); -} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserContext.java new file mode 100644 index 00000000000..cd1bd4dcc42 --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserContext.java @@ -0,0 +1,58 @@ +package com.sap.sse.security.datamining.data; + +import com.sap.sse.common.Util; +import com.sap.sse.datamining.annotations.Dimension; +import com.sap.sse.datamining.annotations.Statistic; +import com.sap.sse.security.SecurityService; +import com.sap.sse.security.shared.impl.User; + +public interface HasUserContext { + User getUser(); + + SecurityService getSecurityService(); + + @Dimension(messageKey="User") + default String getName() { + return getUser().getName(); + } + + @Dimension(messageKey="Locale") + default String getLocale() { + return getUser().getLocale() != null ? getUser().getLocale().getDisplayName() : ""; + } + + @Dimension(messageKey="HasFullName") + default boolean hasFullName() { + return Util.hasLength(getUser().getFullName()); + } + + @Dimension(messageKey="HasCompany") + default boolean hasCompany() { + return Util.hasLength(getUser().getCompany()); + } + + @Dimension(messageKey="Company") + default String getCompany() { + return getUser().getCompany(); + } + + @Dimension(messageKey="HasEmail") + default boolean hasEmail() { + return Util.hasLength(getUser().getEmail()); + } + + @Dimension(messageKey="IsEmailValidated") + default boolean isEmailValidated() { + return getUser().isEmailValidated(); + } + + @Statistic(messageKey="NumberOfPermissions") + default int getNumberOfPermissions() { + return Util.size(getUser().getPermissions()); + } + + @Statistic(messageKey="NumberOfPreferences") + default int getNumberOfPreferences() { + return getSecurityService().getAllPreferences(getUser().getName()).size(); + } +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserGroupContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserGroupContext.java index ae4ce550182..613a77c14ce 100644 --- a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserGroupContext.java +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserGroupContext.java @@ -1,12 +1,25 @@ package com.sap.sse.security.datamining.data; +import com.sap.sse.common.Util; import com.sap.sse.datamining.annotations.Connector; +import com.sap.sse.datamining.annotations.Dimension; +import com.sap.sse.datamining.annotations.Statistic; import com.sap.sse.security.SecurityService; import com.sap.sse.security.shared.impl.UserGroup; public interface HasUserGroupContext { @Connector(messageKey="UserGroup", ordinal=0) UserGroup getUserGroup(); + + @Dimension(messageKey="ImpliesRoles") + default boolean isImpliesRoles() { + return !getUserGroup().getRoleDefinitionMap().isEmpty(); + } + + @Statistic(messageKey="NumberOfUsersInUserGroup") + default int getNumberOfUsersInUserGroup() { + return Util.size(getUserGroup().getUsers()); + } SecurityService getSecurityService(); } diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserInUserGroupContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserInUserGroupContext.java index 2bdbf2eeb63..e31ee3dd930 100644 --- a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserInUserGroupContext.java +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/HasUserInUserGroupContext.java @@ -1,54 +1,8 @@ package com.sap.sse.security.datamining.data; -import com.sap.sse.common.Util; import com.sap.sse.datamining.annotations.Connector; -import com.sap.sse.datamining.annotations.Dimension; -import com.sap.sse.datamining.annotations.Statistic; -import com.sap.sse.security.shared.impl.User; -public interface HasUserInUserGroupContext { +public interface HasUserInUserGroupContext extends HasUserContext { @Connector HasUserGroupContext getUserGroupContext(); - - User getUser(); - - @Dimension(messageKey="User") - default String getName() { - return getUser().getName(); - } - - @Dimension(messageKey="Locale") - default String getLocale() { - return getUser().getLocale() != null ? getUser().getLocale().getDisplayName() : ""; - } - - @Dimension(messageKey="HasFullName") - default boolean hasFullName() { - return Util.hasLength(getUser().getFullName()); - } - - @Dimension(messageKey="HasCompany") - default boolean hasCompany() { - return Util.hasLength(getUser().getCompany()); - } - - @Dimension(messageKey="Company") - default String getCompany() { - return getUser().getCompany(); - } - - @Dimension(messageKey="HasEmail") - default boolean hasEmail() { - return Util.hasLength(getUser().getEmail()); - } - - @Dimension(messageKey="IsEmailValidated") - default boolean isEmailValidated() { - return getUser().isEmailValidated(); - } - - @Statistic(messageKey="NumberOfPermissions") - default int getNumberOfPermissions() { - return Util.size(getUser().getPermissions()); - } } diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/AbstractPermissionOfUserWithContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/AbstractPermissionOfUserWithContext.java new file mode 100644 index 00000000000..79685dbd254 --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/AbstractPermissionOfUserWithContext.java @@ -0,0 +1,17 @@ +package com.sap.sse.security.datamining.data.impl; + +import com.sap.sse.security.datamining.data.HasPermissionOfUserContext; +import com.sap.sse.security.shared.WildcardPermission; + +public abstract class AbstractPermissionOfUserWithContext implements HasPermissionOfUserContext { + private final WildcardPermission permission; + + public AbstractPermissionOfUserWithContext(WildcardPermission permission) { + this.permission = permission; + } + + @Override + public WildcardPermission getPermission() { + return permission; + } +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/PermissionOfUserInUserGroupWithContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/PermissionOfUserInUserGroupWithContext.java index 4812e36953c..1e51fec221c 100644 --- a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/PermissionOfUserInUserGroupWithContext.java +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/PermissionOfUserInUserGroupWithContext.java @@ -1,17 +1,16 @@ package com.sap.sse.security.datamining.data.impl; -import com.sap.sse.common.Util; -import com.sap.sse.security.datamining.data.HasPermissionsOfUserInUserGroupContext; +import com.sap.sse.security.datamining.data.HasPermissionOfUserInUserGroupContext; +import com.sap.sse.security.datamining.data.HasUserContext; import com.sap.sse.security.datamining.data.HasUserInUserGroupContext; import com.sap.sse.security.shared.WildcardPermission; -public class PermissionOfUserInUserGroupWithContext implements HasPermissionsOfUserInUserGroupContext { +public class PermissionOfUserInUserGroupWithContext extends AbstractPermissionOfUserWithContext implements HasPermissionOfUserInUserGroupContext { private final HasUserInUserGroupContext userInUserGroupContext; - private final WildcardPermission permission; public PermissionOfUserInUserGroupWithContext(HasUserInUserGroupContext userInUserGroupContext, WildcardPermission permission) { + super(permission); this.userInUserGroupContext = userInUserGroupContext; - this.permission = permission; } @Override @@ -19,27 +18,8 @@ public class PermissionOfUserInUserGroupWithContext implements HasPermissionsOfU return userInUserGroupContext; } - private WildcardPermission getPermission() { - return permission; - } - @Override - public String getPermissionString() { - return getPermission().toString(); - } - - @Override - public String getPermissionTypes() { - return !getPermission().getParts().isEmpty() ? Util.joinStrings(",", getPermission().getParts().get(0)) : ""; - } - - @Override - public String getPermissionActions() { - return getPermission().getParts().size() > 1 ? Util.joinStrings(",", getPermission().getParts().get(1)) : ""; - } - - @Override - public String getPermissionObjects() { - return getPermission().getParts().size() > 2 ? Util.joinStrings(",", getPermission().getParts().get(2)) : ""; + public HasUserContext getUser() { + return getUserInUserGroupContext(); } } diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/PermissionOfUserWithContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/PermissionOfUserWithContext.java new file mode 100644 index 00000000000..60856f7436f --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/PermissionOfUserWithContext.java @@ -0,0 +1,19 @@ +package com.sap.sse.security.datamining.data.impl; + +import com.sap.sse.security.datamining.data.HasPermissionOfUserContext; +import com.sap.sse.security.datamining.data.HasUserContext; +import com.sap.sse.security.shared.WildcardPermission; + +public class PermissionOfUserWithContext extends AbstractPermissionOfUserWithContext implements HasPermissionOfUserContext { + private final HasUserContext userContext; + + public PermissionOfUserWithContext(HasUserContext userContext, WildcardPermission permission) { + super(permission); + this.userContext = userContext; + } + + @Override + public HasUserContext getUser() { + return userContext; + } +} diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/UserInUserGroupWithContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/UserInUserGroupWithContext.java index 44f831e9a5c..65ea1988f95 100644 --- a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/UserInUserGroupWithContext.java +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/UserInUserGroupWithContext.java @@ -1,5 +1,6 @@ package com.sap.sse.security.datamining.data.impl; +import com.sap.sse.security.SecurityService; import com.sap.sse.security.datamining.data.HasUserGroupContext; import com.sap.sse.security.datamining.data.HasUserInUserGroupContext; import com.sap.sse.security.shared.impl.User; @@ -54,4 +55,9 @@ public class UserInUserGroupWithContext implements HasUserInUserGroupContext { public User getUser() { return user; } + + @Override + public SecurityService getSecurityService() { + return getUserGroupContext().getSecurityService(); + } } diff --git a/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/UserWithContext.java b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/UserWithContext.java new file mode 100644 index 00000000000..f3385b27ee9 --- /dev/null +++ b/java/com.sap.sse.security.datamining/src/com/sap/sse/security/datamining/data/impl/UserWithContext.java @@ -0,0 +1,26 @@ +package com.sap.sse.security.datamining.data.impl; + +import com.sap.sse.security.SecurityService; +import com.sap.sse.security.datamining.data.HasUserContext; +import com.sap.sse.security.shared.impl.User; + +public class UserWithContext implements HasUserContext { + private final User user; + private final SecurityService securityService; + + public UserWithContext(User user, SecurityService securityService) { + super(); + this.user = user; + this.securityService = securityService; + } + + @Override + public User getUser() { + return user; + } + + @Override + public SecurityService getSecurityService() { + return securityService; + } +}