USP_DATAFORMTEMPLATE_EDIT_APPLICATIONUSERCOPYROLES
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@COPYFROM | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_APPLICATIONUSERCOPYROLES
(
@ID uniqueidentifier,
@COPYFROM uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null
)
as
if (@ID = @COPYFROM)
begin
raiserror('ERR_APPUSER_ISSAMEASCOPYFROM', 13, 1);
return
end
if (not exists(select top 1 1 from dbo.APPUSER where ID = @COPYFROM))
begin
raiserror('ERR_APPUSER_COPYFROMDOESNOTEXIST', 13, 1);
return
end
set nocount on;
declare @CURRENTDATE datetime;
begin try
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
set @CURRENTDATE = getdate();
/* cache current context information */
declare @CONTEXTCACHE uniqueidentifier;
set @CONTEXTCACHE = CONTEXT_INFO();
/* set CONTEXT_INFO to @CHANGEAGENTID */
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
declare @ISPROXYUSER bit = 0;
declare @SOURCEUSERPROXYOWNERID uniqueidentifier;
declare @ISPROXYOWNER bit = 0;
declare @PROXYOWNERID uniqueidentifier;
declare @ISPROXYOWNERSYSADMIN bit;
--This variable is used to store SYSTEMROLEAPPUSERID of target appusers.
declare @SYSTEMROLEAPPUSER table (ID uniqueidentifier);
--This variable is used to store ID of target appusers.
declare @TARGETAPPUSER table (ID uniqueidentifier);
select @ISPROXYUSER = dbo.UFN_APPUSER_ISPROXYUSER(@ID);
--If target user is proxy user then we need to check source user has all proxy owners roles
if @ISPROXYUSER = 1
begin
select @PROXYOWNERID = PROXYOWNERID from dbo.APPUSER where ID = @ID;
select @ISPROXYOWNERSYSADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@PROXYOWNERID);
if(@ISPROXYOWNERSYSADMIN = 0)
begin
if((select dbo.UFN_PROXYUSER_COMPAREROLES(@PROXYOWNERID, @COPYFROM)) = 0)
begin
raiserror('ERR_PROXYUSER_PROXYOWNER_COPYFORM_ROLESNOTMATCHED', 13, 1);
end
end
end
else
begin
select @SOURCEUSERPROXYOWNERID = PROXYOWNERID from dbo.APPUSER where ID = @COPYFROM;
select @ISPROXYOWNER = dbo.UFN_APPUSER_HASPROXYUSER(@ID);
if(@ID = @SOURCEUSERPROXYOWNERID)
begin
raiserror('ERR_PROXYUSER_PROXYOWNER_COPYFORM_SOURCEPROXYUSER_TARGETPROXYOWNER', 13, 1);
end
end
--Insert ID of SYSTEMROLEAPPUSER of proxyowner
insert into @SYSTEMROLEAPPUSER
select ID from dbo.SYSTEMROLEAPPUSER where APPUSERID = @ID;
insert into @TARGETAPPUSER
select @ID;
--If target user is proxy owner then system roles should be copied from source user to proxyowner and all the proxy users of the proxy owner.
if @ISPROXYOWNER =1
begin
--when target and source user doesn't have proxy owner and proxy user relationship
--First we have to delete all the roles from proxy owner and its proxy users
--So in below two statements we are taking ID of SYSTEMROLEAPPUSER of proxy owner and its proxy users
--Insert ID of SYSTEMROLEAPPUSER of proxy users of proxy owner
insert into @SYSTEMROLEAPPUSER
select SYSTEMROLEAPPUSER.ID from dbo.SYSTEMROLEAPPUSER
inner join dbo.APPUSER on SYSTEMROLEAPPUSER.APPUSERID = APPUSER.ID
where APPUSER.PROXYOWNERID = @ID;
--We have to add system roles for all the proxy users also so taking ID of all the proxy users and proxy owner
insert into @TARGETAPPUSER
select ID from dbo.APPUSER where PROXYOWNERID = @ID;
end
delete from dbo.SYSTEMROLEAPPUSERSITE where SYSTEMROLEAPPUSERID in (select ID from @SYSTEMROLEAPPUSER);
delete from dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY where SYSTEMROLEAPPUSERID in (select ID from @SYSTEMROLEAPPUSER);
/* this table may not exist depending on product flags */
if (exists (select top 1 1 from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'dbo' and TABLE_NAME = 'SYSTEMROLEAPPUSERACCOUNTINGELEMENTSECURITY'))
begin
delete from dbo.SYSTEMROLEAPPUSERACCOUNTINGELEMENTSECURITY where SYSTEMROLEAPPUSERID in (select ID from @SYSTEMROLEAPPUSER);
end
delete from dbo.SYSTEMROLEAPPUSER where APPUSERID in (select ID from @TARGETAPPUSER);
/* reset CONTEXT_INFO to previous value */
if not @CONTEXTCACHE is null
set CONTEXT_INFO @CONTEXTCACHE;
insert into dbo.SYSTEMROLEAPPUSER(APPUSERID, SYSTEMROLEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, FROMROLESYNC, SECURITYMODECODE, BRANCHSITEID, CONSTITUENTSECURITYMODECODE, ACCOUNTINGELEMENTSECURITYMODECODE)
select @ID, SYSTEMROLEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, FROMROLESYNC, SECURITYMODECODE, BRANCHSITEID, CONSTITUENTSECURITYMODECODE, ACCOUNTINGELEMENTSECURITYMODECODE from dbo.SYSTEMROLEAPPUSER where APPUSERID = @COPYFROM;
--If target user is proxy owner then we need to insert system roles for proxy owner and its proxy users
--We have already added SYSTEMROLEAPPUSER for proxy owner at line 169. Now we have add SYSTEMROLEAPPUSER for all the proxy owners
--We need APPUSERID of proxy users from APPUSER table and SYSTEMROLEID's of source user from SYSTEMROLEAPPUSER table
if @ISPROXYOWNER = 1
begin
insert into dbo.SYSTEMROLEAPPUSER(APPUSERID, SYSTEMROLEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, FROMROLESYNC, SECURITYMODECODE, BRANCHSITEID, CONSTITUENTSECURITYMODECODE, ACCOUNTINGELEMENTSECURITYMODECODE)
select APPUSER.ID,SYSTEMROLEAPPUSER.SYSTEMROLEID,@CHANGEAGENTID,@CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, FROMROLESYNC, SECURITYMODECODE, BRANCHSITEID, CONSTITUENTSECURITYMODECODE, ACCOUNTINGELEMENTSECURITYMODECODE
from dbo.APPUSER
cross join dbo.SYSTEMROLEAPPUSER
where APPUSER.ID in (select ID from @TARGETAPPUSER where ID<>@ID)
and SYSTEMROLEAPPUSER.APPUSERID=@COPYFROM;
end
--This table is used to copy site and constituent security settings
--If @ISPROXYUSER = 1 then we have to copy settings from proxy owner
--If @ISPROXYUSER = 1 and Proxy owner is sysadmin then we have to copy settings from source user
--If @ISPROXYOWNER = 1 then we to copy settings to proxy owner and all proxy users
select copyfrom.ID as FROMID, copyto.ID as TOID
into #IDMAP
from dbo.SYSTEMROLEAPPUSER copyfrom
inner join SYSTEMROLEAPPUSER copyto on copyfrom.APPUSERID =
case when (@ISPROXYUSER = 1 and @ISPROXYOWNERSYSADMIN = 0) then @PROXYOWNERID else @COPYFROM end
and copyto.APPUSERID in (select ID from @TARGETAPPUSER)
and copyto.SYSTEMROLEID = copyfrom.SYSTEMROLEID;
/* this table may not exist depending on product flags */
if (exists (select top 1 1 from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'dbo' and TABLE_NAME = 'SYSTEMROLEAPPUSERACCOUNTINGELEMENTSECURITY'))
begin
insert into dbo.SYSTEMROLEAPPUSERACCOUNTINGELEMENTSECURITY(SYSTEMROLEAPPUSERID, ACCOUNTINGELEMENTSECURITYGROUPID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select idmap.TOID, srau_aes.ACCOUNTINGELEMENTSECURITYGROUPID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.SYSTEMROLEAPPUSERACCOUNTINGELEMENTSECURITY srau_aes
inner join #IDMAP idmap on srau_aes.SYSTEMROLEAPPUSERID = idmap.FROMID;
end
insert into dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY(SYSTEMROLEAPPUSERID, CONSTITUENTSECURITYATTRIBUTEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select idmap.TOID, srau_cs.CONSTITUENTSECURITYATTRIBUTEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY srau_cs
inner join #IDMAP idmap on srau_cs.SYSTEMROLEAPPUSERID = idmap.FROMID;
insert into dbo.SYSTEMROLEAPPUSERSITE(SYSTEMROLEAPPUSERID, SITEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select idmap.TOID, sraus.SITEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.SYSTEMROLEAPPUSERSITE sraus
inner join #IDMAP idmap on sraus.SYSTEMROLEAPPUSERID = idmap.FROMID;
--For proxy user we are coping systemroleappuser data from source user(line no 152).
--We need to copy SECURITYMODECODE,CONSTITUENTSECURITYMODECODE and BRANCHSITEID from proxy owner
--We need to copy SECURITYMODECODE,CONSTITUENTSECURITYMODECODE and BRANCHSITEID from source user if proxy owner is sys admin
if @ISPROXYUSER = 1
begin
update PROXYUSER
set PROXYUSER.SECURITYMODECODE = PROXYOWNER.SECURITYMODECODE,
PROXYUSER.CONSTITUENTSECURITYMODECODE = PROXYOWNER.CONSTITUENTSECURITYMODECODE,
PROXYUSER.BRANCHSITEID = PROXYOWNER.BRANCHSITEID
from dbo.SYSTEMROLEAPPUSER PROXYUSER
inner join dbo.SYSTEMROLEAPPUSER PROXYOWNER on PROXYUSER.SYSTEMROLEID = PROXYOWNER.SYSTEMROLEID
where PROXYOWNER.APPUSERID = case when @ISPROXYOWNERSYSADMIN = 1 then @COPYFROM else @PROXYOWNERID end and PROXYUSER.APPUSERID = @ID;
end
end try
begin catch
EXEC dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;