Search in sources :

Example 11 with UserGroup

use of org.hisp.dhis.user.UserGroup in project dhis2-core by dhis2.

the class DefaultSharingService method saveSharing.

@Override
public <T extends IdentifiableObject> ObjectReport saveSharing(@NotNull Class<T> entityClass, @NotNull T entity, @NotNull Sharing sharing) {
    ObjectReport objectReport = new ObjectReport(Sharing.class, 0);
    BaseIdentifiableObject object = (BaseIdentifiableObject) entity;
    if ((object instanceof SystemDefaultMetadataObject) && ((SystemDefaultMetadataObject) object).isDefault()) {
        objectReport.addErrorReport(new ErrorReport(Sharing.class, ErrorCode.E3013, entityClass.getSimpleName()).setErrorKlass(entityClass));
    }
    User user = currentUserService.getCurrentUser();
    if (!aclService.canManage(user, object)) {
        objectReport.addErrorReport(new ErrorReport(Sharing.class, ErrorCode.E3014).setErrorKlass(entityClass));
    }
    if (!AccessStringHelper.isValid(sharing.getPublicAccess())) {
        objectReport.addErrorReport(new ErrorReport(Sharing.class, ErrorCode.E3015, sharing.getPublicAccess()).setErrorKlass(entityClass));
    }
    if (aclService.canMakeClassExternal(user, entityClass)) {
        object.getSharing().setExternal(sharing.isExternal());
    }
    // ---------------------------------------------------------------------
    // Ignore publicAccess if user is not allowed to make objects public
    // ---------------------------------------------------------------------
    Schema schema = schemaService.getDynamicSchema(entityClass);
    if (aclService.canMakePublic(user, object)) {
        object.setPublicAccess(sharing.getPublicAccess());
    }
    if (!schema.isDataShareable()) {
        if (AccessStringHelper.hasDataSharing(object.getSharing().getPublicAccess())) {
            objectReport.addErrorReport(new ErrorReport(Sharing.class, ErrorCode.E3016).setErrorKlass(entityClass));
        }
    }
    object.getSharing().setOwner(sharing.getOwner());
    // --------------------------------------
    // Handle UserGroupAccesses
    // --------------------------------------
    object.getSharing().getUserGroups().clear();
    if (sharing.hasUserGroupAccesses()) {
        for (UserGroupAccess sharingUserGroupAccess : sharing.getUserGroups().values()) {
            if (!AccessStringHelper.isValid(sharingUserGroupAccess.getAccess())) {
                objectReport.addErrorReport(new ErrorReport(Sharing.class, ErrorCode.E3017, sharingUserGroupAccess.getAccess()).setErrorKlass(entityClass));
            }
            if (!schema.isDataShareable()) {
                if (AccessStringHelper.hasDataSharing(sharingUserGroupAccess.getAccess())) {
                    objectReport.addErrorReport(new ErrorReport(Sharing.class, ErrorCode.E3016).setErrorKlass(entityClass));
                }
            }
            UserGroup userGroup = userGroupService.getUserGroup(sharingUserGroupAccess.getId());
            if (userGroup != null) {
                object.getSharing().addUserGroupAccess(sharingUserGroupAccess);
            }
        }
    }
    // --------------------------------------
    // Handle UserAccesses
    // --------------------------------------
    object.getSharing().getUsers().clear();
    if (sharing.hasUserAccesses()) {
        for (UserAccess sharingUserAccess : sharing.getUsers().values()) {
            if (!AccessStringHelper.isValid(sharingUserAccess.getAccess())) {
                objectReport.addErrorReport(new ErrorReport(Sharing.class, ErrorCode.E3018, sharingUserAccess.getAccess()).setErrorKlass(entityClass));
            }
            if (!schema.isDataShareable()) {
                if (AccessStringHelper.hasDataSharing(sharingUserAccess.getAccess())) {
                    objectReport.addErrorReport(new ErrorReport(Sharing.class, ErrorCode.E3016).setErrorKlass(entityClass));
                }
            }
            User sharingUser = userService.getUser(sharingUserAccess.getId());
            if (sharingUser != null) {
                object.getSharing().addUserAccess(sharingUserAccess);
            }
        }
    }
    manager.updateNoAcl(object);
    if (Program.class.isInstance(object)) {
        syncSharingForEventProgram((Program) object);
    }
    log.info(sharingToString(object));
    return objectReport;
}
Also used : ErrorReport(org.hisp.dhis.feedback.ErrorReport) BaseIdentifiableObject(org.hisp.dhis.common.BaseIdentifiableObject) User(org.hisp.dhis.user.User) UserAccess(org.hisp.dhis.user.sharing.UserAccess) Schema(org.hisp.dhis.schema.Schema) ObjectReport(org.hisp.dhis.feedback.ObjectReport) SystemDefaultMetadataObject(org.hisp.dhis.common.SystemDefaultMetadataObject) UserGroupAccess(org.hisp.dhis.user.sharing.UserGroupAccess) UserGroup(org.hisp.dhis.user.UserGroup)

Example 12 with UserGroup

use of org.hisp.dhis.user.UserGroup in project dhis2-core by dhis2.

the class UserObjectBundleHook method preDelete.

@Override
public void preDelete(User user, ObjectBundle bundle) {
    Set<UserGroup> groups = user.getGroups();
    userGroupService.removeUserFromGroups(user, getUids(groups));
    Set<UserAuthorityGroup> userRoles = user.getUserAuthorityGroups();
    for (UserAuthorityGroup userRole : userRoles) {
        userRole.removeUser(user);
        sessionFactory.getCurrentSession().update(userRole);
    }
}
Also used : UserAuthorityGroup(org.hisp.dhis.user.UserAuthorityGroup) UserGroup(org.hisp.dhis.user.UserGroup)

Example 13 with UserGroup

use of org.hisp.dhis.user.UserGroup in project dhis2-core by dhis2.

the class UserGroupAccess method toDtoObject.

public org.hisp.dhis.user.UserGroupAccess toDtoObject() {
    org.hisp.dhis.user.UserGroupAccess userGroupAccess = new org.hisp.dhis.user.UserGroupAccess();
    userGroupAccess.setUid(getId());
    userGroupAccess.setAccess(getAccess());
    UserGroup userGroup = new UserGroup();
    userGroup.setUid(getId());
    userGroupAccess.setUserGroup(userGroup);
    userGroupAccess.setUid(getId());
    return userGroupAccess;
}
Also used : UserGroup(org.hisp.dhis.user.UserGroup)

Example 14 with UserGroup

use of org.hisp.dhis.user.UserGroup in project dhis2-core by dhis2.

the class DefaultDataSetNotificationService method resolveInternalRecipients.

private Set<User> resolveInternalRecipients(DataSetNotificationTemplate template, CompleteDataSetRegistration registration) {
    UserGroup userGroup = template.getRecipientUserGroup();
    Set<User> users = Sets.newHashSet();
    if (userGroup == null || registration == null) {
        return users;
    }
    users = userGroup.getMembers().stream().filter(user -> organisationUnitService.isInUserHierarchy(registration.getSource().getUid(), user.getOrganisationUnits())).collect(Collectors.toSet());
    return users;
}
Also used : User(org.hisp.dhis.user.User) UserGroup(org.hisp.dhis.user.UserGroup)

Example 15 with UserGroup

use of org.hisp.dhis.user.UserGroup in project dhis2-core by dhis2.

the class SharingTest method setDtoUserGroupAccessClearsExisting.

@Test
void setDtoUserGroupAccessClearsExisting() {
    Sharing actual = new Sharing();
    UserGroup group1 = new UserGroup();
    group1.setUid("id");
    actual.setDtoUserGroupAccesses(singleton(new org.hisp.dhis.user.UserGroupAccess(group1, "rw------")));
    UserGroup group2 = new UserGroup();
    group2.setUid("uid");
    actual.setDtoUserGroupAccesses(singleton(new org.hisp.dhis.user.UserGroupAccess(group2, "r-------")));
    assertEquals(1, actual.getUserGroups().size());
    UserGroupAccess userAccess = actual.getUserGroups().values().iterator().next();
    assertEquals("r-------", userAccess.getAccess());
    assertEquals("uid", userAccess.getId());
}
Also used : Sharing(org.hisp.dhis.user.sharing.Sharing) UserGroup(org.hisp.dhis.user.UserGroup) UserGroupAccess(org.hisp.dhis.user.sharing.UserGroupAccess) Test(org.junit.jupiter.api.Test)

Aggregations

UserGroup (org.hisp.dhis.user.UserGroup)76 User (org.hisp.dhis.user.User)50 Test (org.junit.jupiter.api.Test)32 TransactionalIntegrationTest (org.hisp.dhis.TransactionalIntegrationTest)23 UserGroupAccess (org.hisp.dhis.user.sharing.UserGroupAccess)22 DataElement (org.hisp.dhis.dataelement.DataElement)17 OrganisationUnit (org.hisp.dhis.organisationunit.OrganisationUnit)12 HashSet (java.util.HashSet)11 List (java.util.List)11 IdentifiableObject (org.hisp.dhis.common.IdentifiableObject)10 UserAccess (org.hisp.dhis.user.sharing.UserAccess)10 ClassPathResource (org.springframework.core.io.ClassPathResource)9 Program (org.hisp.dhis.program.Program)6 ArrayList (java.util.ArrayList)5 CategoryOption (org.hisp.dhis.category.CategoryOption)5 Date (java.util.Date)4 HashMap (java.util.HashMap)4 Set (java.util.Set)4 ImportReport (org.hisp.dhis.dxf2.metadata.feedback.ImportReport)4 UserGroupAccess (org.hisp.dhis.user.UserGroupAccess)4