Search in sources :

Example 1 with Roles

use of com.runwaysdk.system.Roles in project geoprism-registry by terraframe.

the class BusinessType method apply.

@Transaction
public static BusinessType apply(JsonObject object) {
    String code = object.get(BusinessType.CODE).getAsString();
    String organizationCode = object.get(BusinessType.ORGANIZATION).getAsString();
    Organization organization = Organization.getByCode(organizationCode);
    ServiceFactory.getGeoObjectTypePermissionService().enforceCanCreate(organization.getCode(), false);
    if (!MasterList.isValidName(code)) {
        throw new InvalidMasterListCodeException("The geo object type code has an invalid character");
    }
    if (code.length() > 64) {
        // Setting the typename on the MdBusiness creates this limitation.
        CodeLengthException ex = new CodeLengthException();
        ex.setLength(64);
        throw ex;
    }
    // assignSRAPermissions(mdVertex, mdBusiness);
    // assignAll_RA_Permissions(mdVertex, mdBusiness, organizationCode);
    LocalizedValue localizedValue = LocalizedValue.fromJSON(object.get(DISPLAYLABEL).getAsJsonObject());
    BusinessType businessType = (object.has(OID) && !object.get(OID).isJsonNull()) ? BusinessType.get(object.get(OID).getAsString()) : new BusinessType();
    businessType.setCode(code);
    businessType.setOrganization(organization);
    LocalizedValueConverter.populate(businessType.getDisplayLabel(), localizedValue);
    boolean isNew = businessType.isNew();
    if (isNew) {
        MdVertexDAO mdVertex = MdVertexDAO.newInstance();
        mdVertex.setValue(MdGeoVertexInfo.PACKAGE, RegistryConstants.BUSINESS_PACKAGE);
        mdVertex.setValue(MdGeoVertexInfo.NAME, code);
        mdVertex.setValue(MdGeoVertexInfo.ENABLE_CHANGE_OVER_TIME, MdAttributeBooleanInfo.FALSE);
        mdVertex.setValue(MdGeoVertexInfo.GENERATE_SOURCE, MdAttributeBooleanInfo.FALSE);
        LocalizedValueConverter.populate(mdVertex, MdVertexInfo.DISPLAY_LABEL, localizedValue);
        mdVertex.apply();
        // TODO CREATE the edge between this class and GeoVertex??
        MdVertexDAOIF mdGeoVertexDAO = MdVertexDAO.getMdVertexDAO(GeoVertex.CLASS);
        MdAttributeGraphReferenceDAO mdGeoObject = MdAttributeGraphReferenceDAO.newInstance();
        mdGeoObject.setValue(MdAttributeGraphReferenceInfo.REFERENCE_MD_VERTEX, mdGeoVertexDAO.getOid());
        mdGeoObject.setValue(MdAttributeGraphReferenceInfo.DEFINING_MD_CLASS, mdVertex.getOid());
        mdGeoObject.setValue(MdAttributeGraphReferenceInfo.NAME, GEO_OBJECT);
        mdGeoObject.setStructValue(MdAttributeGraphReferenceInfo.DESCRIPTION, MdAttributeLocalInfo.DEFAULT_LOCALE, "Geo Object");
        mdGeoObject.apply();
        // DefaultAttribute.CODE
        MdAttributeCharacterDAO vertexCodeMdAttr = MdAttributeCharacterDAO.newInstance();
        vertexCodeMdAttr.setValue(MdAttributeConcreteInfo.NAME, DefaultAttribute.CODE.getName());
        vertexCodeMdAttr.setStructValue(MdAttributeConcreteInfo.DISPLAY_LABEL, MdAttributeLocalInfo.DEFAULT_LOCALE, DefaultAttribute.CODE.getDefaultLocalizedName());
        vertexCodeMdAttr.setStructValue(MdAttributeConcreteInfo.DESCRIPTION, MdAttributeLocalInfo.DEFAULT_LOCALE, DefaultAttribute.CODE.getDefaultDescription());
        vertexCodeMdAttr.setValue(MdAttributeCharacterInfo.SIZE, MdAttributeCharacterInfo.MAX_CHARACTER_SIZE);
        vertexCodeMdAttr.setValue(MdAttributeConcreteInfo.DEFINING_MD_CLASS, mdVertex.getOid());
        vertexCodeMdAttr.setValue(MdAttributeConcreteInfo.REQUIRED, MdAttributeBooleanInfo.TRUE);
        vertexCodeMdAttr.addItem(MdAttributeConcreteInfo.INDEX_TYPE, IndexTypes.UNIQUE_INDEX.getOid());
        vertexCodeMdAttr.apply();
        businessType.setMdVertexId(mdVertex.getOid());
        // Assign permissions
        Roles role = Roles.findRoleByName(RegistryConstants.REGISTRY_SUPER_ADMIN_ROLE);
        RoleDAO roleDAO = (RoleDAO) BusinessFacade.getEntityDAO(role);
        roleDAO.grantPermission(Operation.CREATE, mdVertex.getOid());
        roleDAO.grantPermission(Operation.DELETE, mdVertex.getOid());
        roleDAO.grantPermission(Operation.WRITE, mdVertex.getOid());
        roleDAO.grantPermission(Operation.WRITE_ALL, mdVertex.getOid());
    }
    businessType.apply();
    return businessType;
}
Also used : MdVertexDAOIF(com.runwaysdk.dataaccess.MdVertexDAOIF) MdAttributeGraphReferenceDAO(com.runwaysdk.dataaccess.metadata.MdAttributeGraphReferenceDAO) Roles(com.runwaysdk.system.Roles) MdAttributeCharacterDAO(com.runwaysdk.dataaccess.metadata.MdAttributeCharacterDAO) LocalizedValue(org.commongeoregistry.adapter.dataaccess.LocalizedValue) RoleDAO(com.runwaysdk.business.rbac.RoleDAO) MdVertexDAO(com.runwaysdk.dataaccess.metadata.graph.MdVertexDAO) Transaction(com.runwaysdk.dataaccess.transaction.Transaction)

Example 2 with Roles

use of com.runwaysdk.system.Roles in project geoprism-registry by terraframe.

the class Organization method getGeoObjectTypes.

/**
 * Return a map of {@link GeoObjectType} codes and labels for this
 * {@link Organization}.
 *
 * @return a map of {@link GeoObjectType} codes and labels for this
 *         {@link Organization}.
 */
public Map<String, ServerGeoObjectType> getGeoObjectTypes() {
    // For performance, get all of the universals defined
    List<? extends EntityDAOIF> universalList = ObjectCache.getCachedEntityDAOs(Universal.CLASS);
    Map<String, ServerGeoObjectType> typeCodeMap = new HashMap<String, ServerGeoObjectType>();
    for (EntityDAOIF entityDAOIF : universalList) {
        Universal universal = (Universal) BusinessFacade.get(entityDAOIF);
        // Check to see if the universal is owned by the organization role.
        String ownerId = universal.getOwnerOid();
        Roles organizationRole = this.getRole();
        if (ownerId.equals(organizationRole.getOid())) {
            ServerGeoObjectType type = ServerGeoObjectType.get(universal);
            typeCodeMap.put(type.getCode(), type);
        }
    }
    return typeCodeMap;
}
Also used : Universal(com.runwaysdk.system.gis.geo.Universal) HashMap(java.util.HashMap) ServerGeoObjectType(net.geoprism.registry.model.ServerGeoObjectType) EntityDAOIF(com.runwaysdk.dataaccess.EntityDAOIF) Roles(com.runwaysdk.system.Roles)

Example 3 with Roles

use of com.runwaysdk.system.Roles in project geoprism-registry by terraframe.

the class Organization method getRootOrganization.

/**
 * If the given actor OID is a role that represents an {@link Organization},
 * then return the corresponding {@link Organization} or NULL otherwise.
 *
 * Precondition: Assumes that the actor id, if it is associated with an
 * organization, is the root organization role and not a sub-role of the root
 * organization.
 *
 * @param actorOid
 *          OID of an actor.
 *
 * @return the corresponding {@link Organization} or NULL otherwise.
 */
public static Organization getRootOrganization(String actorOid) {
    Actor actor = null;
    try {
        actor = Actor.get(actorOid);
    } catch (com.runwaysdk.dataaccess.cache.DataNotFoundException e) {
        return null;
    }
    // If the actor is not a role, then it does not represent an organization
    if (!(actor instanceof Roles)) {
        return null;
    }
    Roles role = (Roles) actor;
    String roleName = role.getRoleName();
    // not a role that pertains to an organization.
    if (roleName.indexOf(RegistryRole.Type.REGISTRY_ROOT_ORG_ROLE) <= -1) {
        return null;
    }
    String organizationCode = roleName.substring(RegistryRole.Type.REGISTRY_ROOT_ORG_ROLE.length() + 1, roleName.length());
    try {
        return Organization.getByCode(organizationCode);
    } catch (com.runwaysdk.dataaccess.cache.DataNotFoundException e) {
        return null;
    }
}
Also used : Actor(com.runwaysdk.system.Actor) SingleActor(com.runwaysdk.system.SingleActor) Roles(com.runwaysdk.system.Roles)

Example 4 with Roles

use of com.runwaysdk.system.Roles in project geoprism-registry by terraframe.

the class UserInfo method applyUserWithRoles.

@Transaction
public static JSONObject applyUserWithRoles(JsonObject account, String[] roleNameArray, boolean isUserInvite) {
    GeoprismUser geoprismUser = deserialize(account);
    if (roleNameArray != null && roleNameArray.length == 0) {
        // TODO : Better Error
        throw new AttributeValueException("You're attempting to apply a user with zero roles?", "");
    }
    /*
     * Make sure they have permissions to all these new roles they want to
     * assign
     */
    if (!isUserInvite && Session.getCurrentSession() != null && Session.getCurrentSession().getUser() != null) {
        Set<RoleDAOIF> myRoles = Session.getCurrentSession().getUser().authorizedRoles();
        boolean hasSRA = false;
        for (RoleDAOIF myRole : myRoles) {
            if (RegistryRole.Type.isSRA_Role(myRole.getRoleName())) {
                hasSRA = true;
            }
        }
        if (!hasSRA && roleNameArray != null) {
            for (String roleName : roleNameArray) {
                boolean hasPermission = false;
                if (RegistryRole.Type.isOrgRole(roleName) && !RegistryRole.Type.isRootOrgRole(roleName)) {
                    String orgCodeArg = RegistryRole.Type.parseOrgCode(roleName);
                    for (RoleDAOIF myRole : myRoles) {
                        if (RegistryRole.Type.isRA_Role(myRole.getRoleName())) {
                            String myOrgCode = RegistryRole.Type.parseOrgCode(myRole.getRoleName());
                            if (myOrgCode.equals(orgCodeArg)) {
                                hasPermission = true;
                                break;
                            }
                        }
                    }
                } else if (RegistryRole.Type.isSRA_Role(roleName)) {
                    SRAException ex = new SRAException();
                    throw ex;
                } else {
                    hasPermission = true;
                }
                if (!hasPermission) {
                    OrganizationRAException ex = new OrganizationRAException();
                    throw ex;
                }
            }
        }
    }
    // They're not allowed to change the admin username
    if (!geoprismUser.isNew()) {
        GeoprismUser adminUser = getAdminUser();
        if (adminUser != null && adminUser.getOid().equals(geoprismUser.getOid()) && !geoprismUser.getUsername().equals(RegistryConstants.ADMIN_USER_NAME)) {
            // TODO : Better Error
            throw new AttributeValueException("You can't change the admin username", RegistryConstants.ADMIN_USER_NAME);
        }
    }
    geoprismUser.apply();
    if (roleNameArray != null) {
        List<Roles> newRoles = new LinkedList<Roles>();
        Set<String> roleIdSet = new HashSet<String>();
        for (String roleName : roleNameArray) {
            Roles role = Roles.findRoleByName(roleName);
            roleIdSet.add(role.getOid());
            newRoles.add(role);
        }
        List<ConfigurationIF> configurations = ConfigurationService.getConfigurations();
        for (ConfigurationIF configuration : configurations) {
            configuration.configureUserRoles(roleIdSet);
        }
        UserDAOIF user = UserDAO.get(geoprismUser.getOid());
        // Remove existing roles.
        Set<RoleDAOIF> userRoles = user.assignedRoles();
        for (RoleDAOIF roleDAOIF : userRoles) {
            RoleDAO roleDAO = RoleDAO.get(roleDAOIF.getOid()).getBusinessDAO();
            if (!(geoprismUser.getUsername().equals(RegistryConstants.ADMIN_USER_NAME) && (roleDAO.getRoleName().equals(RegistryConstants.REGISTRY_SUPER_ADMIN_ROLE) || roleDAO.getRoleName().equals(DefaultConfiguration.ADMIN)))) {
                roleDAO.deassignMember(user);
            }
        }
        // Delete existing relationships with Organizations.
        QueryFactory qf = new QueryFactory();
        OrganizationUserQuery q = new OrganizationUserQuery(qf);
        q.WHERE(q.childOid().EQ(geoprismUser.getOid()));
        OIterator<? extends OrganizationUser> i = q.getIterator();
        i.forEach(r -> r.delete());
        /*
       * Assign roles and associate with the user
       */
        Set<String> organizationSet = new HashSet<String>();
        for (Roles role : newRoles) {
            RoleDAO roleDAO = (RoleDAO) BusinessFacade.getEntityDAO(role);
            roleDAO.assignMember(user);
            RegistryRole registryRole = new RegistryRoleConverter().build(role);
            if (registryRole != null) {
                String organizationCode = registryRole.getOrganizationCode();
                if (organizationCode != null && !organizationCode.equals("") && !organizationSet.contains(organizationCode)) {
                    Organization organization = Organization.getByCode(organizationCode);
                    organization.addUsers(geoprismUser).apply();
                    organizationSet.add(organizationCode);
                }
            }
        }
    }
    UserInfo info = getByUser(geoprismUser);
    if (info == null) {
        info = new UserInfo();
        info.setGeoprismUser(geoprismUser);
    } else {
        info.lock();
    }
    if (account.has(UserInfo.ALTFIRSTNAME)) {
        info.setAltFirstName(account.get(UserInfo.ALTFIRSTNAME).getAsString());
    } else {
        info.setAltFirstName("");
    }
    if (account.has(UserInfo.ALTLASTNAME)) {
        info.setAltLastName(account.get(UserInfo.ALTLASTNAME).getAsString());
    } else {
        info.setAltLastName("");
    }
    if (account.has(UserInfo.ALTPHONENUMBER)) {
        info.setAltPhoneNumber(account.get(UserInfo.ALTPHONENUMBER).getAsString());
    } else {
        info.setAltPhoneNumber("");
    }
    if (account.has(UserInfo.POSITION)) {
        info.setPosition(account.get(UserInfo.POSITION).getAsString());
    } else {
        info.setPosition("");
    }
    if (account.has(UserInfo.DEPARTMENT)) {
        info.setDepartment(account.get(UserInfo.DEPARTMENT).getAsString());
    } else {
        info.setDepartment("");
    }
    if (account.has(UserInfo.EXTERNALSYSTEMOID)) {
        info.setExternalSystemOid(account.get(UserInfo.EXTERNALSYSTEMOID).getAsString());
    } else {
        info.setExternalSystemOid("");
    }
    info.apply();
    return serialize(geoprismUser, info);
}
Also used : RegistryRole(org.commongeoregistry.adapter.metadata.RegistryRole) QueryFactory(com.runwaysdk.query.QueryFactory) Roles(com.runwaysdk.system.Roles) AttributeValueException(com.runwaysdk.dataaccess.attributes.AttributeValueException) LinkedList(java.util.LinkedList) ConfigurationIF(net.geoprism.ConfigurationIF) RegistryRoleConverter(net.geoprism.registry.conversion.RegistryRoleConverter) RoleDAO(com.runwaysdk.business.rbac.RoleDAO) GeoprismUser(net.geoprism.GeoprismUser) RoleDAOIF(com.runwaysdk.business.rbac.RoleDAOIF) UserDAOIF(com.runwaysdk.business.rbac.UserDAOIF) HashSet(java.util.HashSet) Transaction(com.runwaysdk.dataaccess.transaction.Transaction)

Example 5 with Roles

use of com.runwaysdk.system.Roles in project geoprism-registry by terraframe.

the class Task method createNewTask.

public static Task createNewTask(Collection<Roles> roles, TaskTypeIF taskType, Map<String, LocalizedValue> values, String sourceOid) {
    LocalizedValueStore lvsTitle = LocalizedValueStore.getByKey(taskType.getTitleKey());
    LocalizedValueStore lvsTemplate = LocalizedValueStore.getByKey(taskType.getTemplateKey());
    Task task = new Task();
    task.setTitle(lvsTitle);
    task.setTemplate(lvsTemplate);
    task.setSourceOid(sourceOid);
    processLocale(lvsTemplate, values, task, MdAttributeLocalInfo.DEFAULT_LOCALE);
    Collection<Locale> locales = LocalizationFacade.getInstalledLocales();
    for (Locale locale : locales) {
        processLocale(lvsTemplate, values, task, locale.toString());
    }
    task.apply();
    for (Roles role : roles) {
        TaskHasRole hasRole = new TaskHasRole(task, role);
        hasRole.apply();
    }
    return task;
}
Also used : Locale(java.util.Locale) Roles(com.runwaysdk.system.Roles) LocalizedValueStore(com.runwaysdk.localization.LocalizedValueStore)

Aggregations

Roles (com.runwaysdk.system.Roles)25 RegistryRoleConverter (net.geoprism.registry.conversion.RegistryRoleConverter)7 RegistryRole (org.commongeoregistry.adapter.metadata.RegistryRole)7 RoleDAO (com.runwaysdk.business.rbac.RoleDAO)6 Transaction (com.runwaysdk.dataaccess.transaction.Transaction)4 Request (com.runwaysdk.session.Request)4 Locale (java.util.Locale)4 Organization (net.geoprism.registry.Organization)4 LocalizedValue (org.commongeoregistry.adapter.dataaccess.LocalizedValue)4 MdVertexDAOIF (com.runwaysdk.dataaccess.MdVertexDAOIF)3 Actor (com.runwaysdk.system.Actor)3 HashMap (java.util.HashMap)3 HashSet (java.util.HashSet)3 LinkedList (java.util.LinkedList)3 ServerGeoObjectType (net.geoprism.registry.model.ServerGeoObjectType)3 MdVertexDAO (com.runwaysdk.dataaccess.metadata.graph.MdVertexDAO)2 LocalizedValueStore (com.runwaysdk.localization.LocalizedValueStore)2 GeoprismUser (net.geoprism.GeoprismUser)2 ServerHierarchyType (net.geoprism.registry.model.ServerHierarchyType)2 JsonArray (com.google.gson.JsonArray)1