From 5a96d8ef5cbc88df366016ae9dd7ee46e4ca417a Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 7 Jul 2014 15:12:36 -0700 Subject: [PATCH] CLOUDSTACK-7073: Added domainId field to the user table in order to restrict duplicated users creation on the db level --- engine/schema/src/com/cloud/user/UserVO.java | 6 ++++++ .../schema/src/com/cloud/user/dao/UserDaoImpl.java | 13 +++++++++++++ setup/db/db/schema-440to450.sql | 6 ++++++ 3 files changed, 25 insertions(+) diff --git a/engine/schema/src/com/cloud/user/UserVO.java b/engine/schema/src/com/cloud/user/UserVO.java index 68879f6f807..8ab450d877a 100644 --- a/engine/schema/src/com/cloud/user/UserVO.java +++ b/engine/schema/src/com/cloud/user/UserVO.java @@ -97,6 +97,9 @@ public class UserVO implements User, Identity, InternalIdentity { @Column(name = "default") boolean isDefault; + @Column(name = "domain_id") + private long domainId; + public UserVO() { this.uuid = UUID.randomUUID().toString(); } @@ -270,4 +273,7 @@ public class UserVO implements User, Identity, InternalIdentity { return isDefault; } + public void setDomainId(long domainId) { + this.domainId = domainId; + } } diff --git a/engine/schema/src/com/cloud/user/dao/UserDaoImpl.java b/engine/schema/src/com/cloud/user/dao/UserDaoImpl.java index 6ac398d81c2..d39177eb67b 100644 --- a/engine/schema/src/com/cloud/user/dao/UserDaoImpl.java +++ b/engine/schema/src/com/cloud/user/dao/UserDaoImpl.java @@ -19,9 +19,11 @@ package com.cloud.user.dao; import java.util.List; import javax.ejb.Local; +import javax.inject.Inject; import org.springframework.stereotype.Component; +import com.cloud.user.Account; import com.cloud.user.UserVO; import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDaoBase; @@ -40,6 +42,9 @@ public class UserDaoImpl extends GenericDaoBase implements UserDao protected SearchBuilder SecretKeySearch; protected SearchBuilder RegistrationTokenSearch; + @Inject + AccountDao _accountDao; + protected UserDaoImpl() { UsernameSearch = createSearchBuilder(); UsernameSearch.and("username", UsernameSearch.entity().getUsername(), SearchCriteria.Op.EQ); @@ -128,4 +133,12 @@ public class UserDaoImpl extends GenericDaoBase implements UserDao return listBy(sc); } + @Override + @DB + public UserVO persist(UserVO user) { + Account account = _accountDao.findById(user.getAccountId()); + user.setDomainId(account.getDomainId()); + return super.persist(user); + } + } diff --git a/setup/db/db/schema-440to450.sql b/setup/db/db/schema-440to450.sql index 1a019ddf494..5fd62002e89 100644 --- a/setup/db/db/schema-440to450.sql +++ b/setup/db/db/schema-440to450.sql @@ -234,3 +234,9 @@ CREATE VIEW `cloud`.`volume_view` AS /* As part of the separation of Xen and XenServer, update the column for the network labels */ ALTER TABLE `cloud`.`physical_network_traffic_types` CHANGE `xen_network_label` `xenserver_network_label` varchar(255) COMMENT 'The network name label of the physical device dedicated to this traffic on a XenServer host'; + +/*Adding domainId field to the user table in order to restrict duplicated users creation on the db level*/ +ALTER TABLE `cloud`.`user` ADD COLUMN domain_id bigint(20) unsigned DEFAULT NULL; +ALTER TABLE `cloud`.`user` ADD CONSTRAINT `fk_user__domain_id` FOREIGN KEY `fk_user__domain_id`(`domain_id`) REFERENCES `domain`(`id`) ON DELETE CASCADE; +UPDATE `cloud`.`user` SET `cloud`.`user`.domain_id=(SELECT `cloud`.`account`.domain_id FROM `cloud`.`account` WHERE `cloud`.`account`.id=`cloud`.`user`.account_id) where id > 0; +ALTER TABLE `cloud`.`user` ADD UNIQUE KEY `username_domain_id` (`username`,`domain_id`);