UFN_SITESFORUSERONCODETABLE
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@CODETABLEID | uniqueidentifier | IN |
Definition
Copy
create function dbo.UFN_SITESFORUSERONCODETABLE
(
@CURRENTAPPUSERID uniqueidentifier,
@CODETABLEID uniqueidentifier
)
returns @T table (SITEID uniqueidentifier)
as
begin
--If the user is a sysadamin, or a codetable is not defined, return all sites the user can access.
if dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
or @CODETABLEID is null
begin
insert into @T (SITEID)
values(null);
insert into @T (SITEID)
select * from dbo.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
);
insert into @RAWSITELIST(
SITESECURITYMODE,
SITEID
)
select
PERMISSIONS.SITESECURITYMODE,
SITEPERMISSION.SITEID
from
dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_CODETABLE as PERMISSIONS
left join dbo.SITEPERMISSION on SITEPERMISSION.SYSTEMROLEID = PERMISSIONS.SYSTEMROLEID and SITEPERMISSION.APPUSERID = PERMISSIONS.APPUSERID
where PERMISSIONS.APPUSERID = @CURRENTAPPUSERID and
PERMISSIONS.CODETABLECATALOGID = @CODETABLEID and
(PERMISSIONS.ADDPERMISSIONCODE = 1 or PERMISSIONS.DELETEPERMISSIONCODE = 1 or PERMISSIONS.UPDATEPERMISSIONCODE = 1);
--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 dbo.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