/** * Assigns tenants to and unassigns tenants from given user. * * @param user * @param tenantsToAssign Tenants to assign (nullable). * @param tenantsToUnassign Tenants to unassign (nullable). * @throws AccessException */ @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW, isolation = Isolation.REPEATABLE_READ) public void assignTenants(final PFUserDO user, final Set<TenantDO> tenantsToAssign, final Set<TenantDO> tenantsToUnassign) { internalAssignTenants(user, tenantsToAssign, tenantsToUnassign, true, true); }
private void createHistoryEntry(final PFUserDO user, Collection<TenantDO> unassignedList, Collection<TenantDO> assignedList) { if (unassignedList != null && unassignedList.size() == 0) { unassignedList = null; } if (assignedList != null && assignedList.size() == 0) { assignedList = null; } if (unassignedList == null && assignedList == null) { return; } createHistoryEntry(user, user.getId(), "assignedTenants", TenantDO.class, unassignedList, assignedList); }
@Override public List<TenantDO> internalLoadAll() { return findAll(); }
start = System.currentTimeMillis(); tenantDao .assignTenants(getData(), form.assignTenantsListHelper.getItemsToAssign(), form.assignTenantsListHelper.getItemsToUnassign()); end = System.currentTimeMillis(); log.info("Finish assign tenants (user member of admin group). Took: " + (end - start) / 1000 + " sec."); if (tenantDao.hasAssignedTenants(getData()) == false) { log.info("Start assign tenants"); start = System.currentTimeMillis(); Set<TenantDO> tenantsToAssign = new HashSet<>(); tenantsToAssign.add(tenantDao.getDefaultTenant()); tenantDao.internalAssignTenants(getData(), tenantsToAssign, null, false, true); end = System.currentTimeMillis(); log.info("Finish assign tenants. Took: " + (end - start) / 1000 + " sec.");
private void assignToDefaultTenant(PFUserDO user) { Set<TenantDO> tenantsToAssign = new HashSet<>(); tenantsToAssign.add(tenantDao.getDefaultTenant()); tenantDao.internalAssignTenants(user, tenantsToAssign, null, false, false); TenantRegistryMap.getInstance().getTenantRegistry().getUserGroupCache().forceReload(); }
defaultTenant = tenantDao.getDefaultTenant();
@Override public boolean hasSelectAccess(PFUserDO loggedInUser, TenantDO tenant, boolean b) { return tenantDao.hasSelectAccess(loggedInUser, tenant, b); }
@Override public boolean hasTenants() { if (hasTenants == null) { hasTenants = tenantDao.hasTenants(); } return hasTenants; }
public TenantDO getDefaultTenant() { @SuppressWarnings("unchecked") final List<TenantDO> list = (List<TenantDO>) getHibernateTemplate() .find("from TenantDO t where t.defaultTenant = true"); if (list != null && list.isEmpty() == true) { return null; } if (list.size() > 1) { log.warn( "There are more than one tenent object declared as default! No or only one tenant should be defined as default!"); } return list.get(0); }
/** * @see org.projectforge.framework.persistence.api.BaseDao#onSaveOrModify(org.projectforge.core.ExtendedBaseDO) */ @Override protected void onSaveOrModify(final TenantDO obj) { if (obj.isDefault() == false) { return; } final TenantDO defaultTenant = getDefaultTenant(); if (defaultTenant == null) { return; } if (obj.getId() == null || ObjectUtils.equals(defaultTenant.getId(), obj.getId()) == false) { throw new UserException("multitenancy.error.maxOnlyOneTenantShouldBeDefault"); } }
Set<TenantDO> tenantsToAssign = new HashSet<>(); tenantsToAssign.add(defaultTenant); tenantDao.internalAssignTenants(user, tenantsToAssign, null, false, false);
isNew = true; userPrefs = new UserXmlPreferencesDO(); userPrefs.setTenant(tenantDao.getDefaultTenant()); userPrefs.setCreated(date); userPrefs.setUser(userDao.internalGetById(userId));
createHistoryEntry(user, null, tenantList); createHistoryEntry(user, tenantList, null);
public boolean hasTenants() { List<TenantDO> allTenants = findAll(); return allTenants != null && allTenants.size() > 0; }
private PFUserDO createUser(final String username, final boolean superAdmin) { final PFUserDO user = new PFUserDO().setUsername(username); user.setSuperAdmin(superAdmin); user.setTenant(defaultTenant); userService.save(user); Set<TenantDO> tenantsToAssign = new HashSet<>(); tenantsToAssign.add(defaultTenant); tenantDao.internalAssignTenants(user, tenantsToAssign, null, false, false); return user; }
final boolean hasDefaultTenant = tenantDao.getDefaultTenant() != null; if (isNew() == true && hasDefaultTenant == false) { getData().setDefaultTenant(true);
/** * Creates ProjectForge's system groups for the new tenant.<br/> * Creates for every user an history entry if the user is part of this new tenant. * * @param tenant * @see org.projectforge.framework.persistence.api.BaseDao#afterSave(org.projectforge.core.ExtendedBaseDO) */ @Override public void afterSave(final TenantDO tenant) { final PFUserDO adminUser = ThreadLocalUserContext.getUser(); if (tenant.isDefault() == false) { // The groups do already exist for the default tenant. initDatabaseDao.internalCreateProjectForgeGroups(tenant, adminUser); } else { // Clear the dummy entry: TenantRegistryMap.getInstance().clear(); } final Collection<TenantDO> tenantList = new ArrayList<TenantDO>(); tenantList.add(tenant); if (tenant.getAssignedUsers() != null) { // Create history entry of PFUserDO for all assigned users: for (final PFUserDO user : tenant.getAssignedUsers()) { createHistoryEntry(user, null, tenantList); } } }
public boolean hasAssignedTenants(PFUserDO user) { for (TenantDO tenant : findAll()) { for (PFUserDO tenantUser : tenant.getAssignedUsers()) { if (tenantUser.getId().equals(user.getId())) { return true; } } } return false; }
public PFUserDO addUser(final PFUserDO user) { user.setTenant(tenantService.getDefaultTenant()); Set<UserRightDO> userRights = new HashSet<>(user.getRights()); user.getRights().clear(); userService.save(user); userRights.forEach(right -> userRightDao.internalSave(right)); Set<TenantDO> tenantsToAssign = new HashSet<>(); tenantsToAssign.add(tenantService.getDefaultTenant()); tenantDao.internalAssignTenants(user, tenantsToAssign, null, false, false); putUser(user); if (user.getUsername().equals(AbstractTestBase.ADMIN) == true) { AbstractTestBase.ADMIN_USER = user; } return user; }
createHistoryEntry(user, unassignedTenants, assignedTenants);