UFN_SITESFORUSERONFEATURE
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@FEATUREID | uniqueidentifier | IN | |
@FEATURETYPE | tinyint | IN |
Definition
Copy
CREATE function [BBDW].[UFN_SITESFORUSERONFEATURE]
(
@CURRENTAPPUSERID uniqueidentifier,
@FEATUREID uniqueidentifier,
@FEATURETYPE tinyint
)
returns @T table ([SITEID] uniqueidentifier)
as
begin
--If the user is a syadamin, or a feature is not defined, return all sites the user can access.
if exists (select 1 from BBDW.[DIM_APPUSER] where [APPUSERSYSTEMID] = @CURRENTAPPUSERID and [APPUSERISSYSADMIN] = 1)
or @FEATUREID is null
or @FEATURETYPE is null
or @FEATURETYPE = 0 -- SecurityFeatureType.None
begin
insert into @T ([SITEID])
values(null);
insert into @T ([SITEID])
select * from BBDW.[UFN_SITESFORUSER](@CURRENTAPPUSERID);
return
end
--Table to hold all relevant user/role/site relationships before
-- removing dupes or taking security mode into consideration.
declare @RAWSITELIST table(
[SITESECURITYMODE] tinyint,
[SITEID] uniqueidentifier
);
if @FEATURETYPE = 1 -- SecurityFeatureType.Form
begin
insert into @RAWSITELIST(
[SITESECURITYMODE],
[SITEID]
)
select
ds.[SITESECURITYMODE],
sp.[SITESYSTEMID] as [SITEID]
from BBDW.[v_SECURITY_SYSTEMROLEASSIGNMENT_USER_FORM] ds
left join BBDW.[FACT_SITEPERMISSION] sp on sp.[SYSTEMROLEAPPUSERFACTID] = ds.[SYSTEMROLEAPPUSERFACTID]
where
ds.[APPUSERID] = @CURRENTAPPUSERID and
ds.[DATAFORMINSTANCECATALOGID] = @FEATUREID;
end
if @FEATURETYPE = 2 -- SecurityFeatureType.DataList
begin
insert into @RAWSITELIST(
[SITESECURITYMODE],
[SITEID]
)
select
ds.[SITESECURITYMODE],
sp.[SITESYSTEMID] as [SITEID]
from BBDW.[V_SECURITY_SYSTEMROLEASSIGNMENT_USER_DATALIST] ds
left join BBDW.[FACT_SITEPERMISSION] sp on sp.[SYSTEMROLEAPPUSERFACTID] = ds.[SYSTEMROLEAPPUSERFACTID]
where
ds.[APPUSERID] = @CURRENTAPPUSERID and
ds.[DATALISTCATALOGID] = @FEATUREID;
end
if @FEATURETYPE = 10 -- SecurityFeatureType.AdHocQueryView
begin
insert into @RAWSITELIST(
[SITESECURITYMODE],
[SITEID]
)
select
sq.[SITESECURITYMODE],
sp.[SITESYSTEMID] as [SITEID]
from BBDW.[v_SECURITY_SYSTEMROLEASSIGNMENT_USER_QUERYVIEW] sq
left join BBDW.[FACT_SITEPERMISSION] sp on sp.[SYSTEMROLEAPPUSERFACTID] = sq.[SYSTEMROLEAPPUSERFACTID]
where
sq.[APPUSERID] = @CURRENTAPPUSERID and
sq.[QUERYVIEWCATALOGID] = @FEATUREID;
end
--If the raw lists contains a role assignment that allows access to all records, return all sites.
if exists( select 1 from @RAWSITELIST where [SITESECURITYMODE] = 0)
begin
insert into @T ([SITEID])
values(null);
insert into @T ([SITEID])
select * from BBDW.[UFN_SITESFORUSER](@CURRENTAPPUSERID);
end
else --Otherwise, return the listed sites (null for role assignments for records with no sites).
begin
insert into @T ([SITEID])
select distinct case [SITESECURITYMODE] when 1 then null else [SITEID] end from @RAWSITELIST;
end
return;
end;