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