UFN_ACCOUNTINGELEMENT_ELEMENTSFORUSER
Returns a table with all elements for the given app user.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@APPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_ACCOUNTINGELEMENT_ELEMENTSFORUSER
(
@APPUSERID uniqueidentifier
)
returns @T table (ELEMENTID uniqueidentifier primary key) as
begin
-- Return all elements if user is sysadmin.
-- If user has a security mode = 0, they have access to all elements
if dbo.UFN_APPUSER_ISSYSADMIN(@APPUSERID) = 1 or exists(select 1 from dbo.SYSTEMROLEAPPUSER APP where APP.APPUSERID = @APPUSERID and APP.ACCOUNTINGELEMENTSECURITYMODECODE = 0)
begin
insert @T (ELEMENTID) select ID from dbo.PDACCOUNTSEGMENTVALUE
return;
end
-- Elements explicitly granted via security mode 1
insert @T (ELEMENTID)
select distinct AESGE.DATAELEMENTID ELEMENTID
from
dbo.ACCOUNTINGELEMENTSECURITYGROUPELEMENT AESGE
inner join dbo.ACCOUNTINGELEMENTSECURITYGROUP AESG on AESGE.ACCOUNTINGELEMENTSECURITYGROUPID = AESG.ID
inner join dbo.SYSTEMROLEAPPUSERACCOUNTINGELEMENTSECURITY SAE on sae.ACCOUNTINGELEMENTSECURITYGROUPID = AESG.ID
inner join dbo.SYSTEMROLEAPPUSER on SAE.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID
where
SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID
and SYSTEMROLEAPPUSER.ACCOUNTINGELEMENTSECURITYMODECODE = 1
-- Elements implicitly granted via security mode 2
if exists (select 1 from dbo.SYSTEMROLEAPPUSER APP where APP.APPUSERID = @APPUSERID and APP.ACCOUNTINGELEMENTSECURITYMODECODE = 2)
-- A security mode 2 includes all elements not in the denied group, so include all elements.
insert @T(ELEMENTID)
select ID from
dbo.PDACCOUNTSEGMENTVALUE
where ID not in (select ELEMENTID from @T)
and ID not in
(select AESGE.DATAELEMENTID from
dbo.ACCOUNTINGELEMENTSECURITYGROUPELEMENT AESGE
inner join dbo.ACCOUNTINGELEMENTSECURITYGROUP AESG on AESGE.ACCOUNTINGELEMENTSECURITYGROUPID = AESG.ID
inner join dbo.SYSTEMROLEAPPUSERACCOUNTINGELEMENTSECURITY SAE on sae.ACCOUNTINGELEMENTSECURITYGROUPID = AESG.ID
inner join dbo.SYSTEMROLEAPPUSER on SAE.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID
where
SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID
and SYSTEMROLEAPPUSER.ACCOUNTINGELEMENTSECURITYMODECODE = 2
)
-- Elements not of the same type as those in the groups
declare @STRUCTURES table (ID uniqueidentifier)
declare @STCOUNT int
select @STCOUNT = COUNT(ID) from dbo.PDACCOUNTSTRUCTURE --where PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID
insert @STRUCTURES (ID)
select distinct PDACCOUNTSEGMENTVALUE.PDACCOUNTSTRUCTUREID from
dbo.ACCOUNTINGELEMENTSECURITYGROUPELEMENT AESGE
inner join dbo.ACCOUNTINGELEMENTSECURITYGROUP AESG on AESGE.ACCOUNTINGELEMENTSECURITYGROUPID = AESG.ID
inner join dbo.SYSTEMROLEAPPUSERACCOUNTINGELEMENTSECURITY SAE on sae.ACCOUNTINGELEMENTSECURITYGROUPID = AESG.ID
inner join dbo.SYSTEMROLEAPPUSER on SAE.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID
inner join dbo.PDACCOUNTSEGMENTVALUE on AESGE.DATAELEMENTID = PDACCOUNTSEGMENTVALUE.ID
if @@ROWCOUNT > 0 and @@ROWCOUNT < @STCOUNT -- If number of rows is = number of structures, no additional elements
insert @T(ELEMENTID)
select ID from
dbo.PDACCOUNTSEGMENTVALUE
where ID not in (select ELEMENTID from @T)
and PDACCOUNTSEGMENTVALUE.PDACCOUNTSTRUCTUREID not in
(select ID from @STRUCTURES)
return
end