USP_DATALIST_CLIENT_SITES_SECURITY

Returns the sites that the specified user has the specified rights for, and their parents.

Parameters

Parameter Parameter Type Mode Description
@CLIENTUSERSID int IN Client Users ID
@TASKGUIDXML xml IN Task Guid XML
@GETALLCLIENTSITESWITHANYTASK bit IN

Definition

Copy


CREATE procedure [dbo].[USP_DATALIST_CLIENT_SITES_SECURITY](@CLIENTUSERSID int, @TASKGUIDXML XML, @GETALLCLIENTSITESWITHANYTASK bit=0)
as
    set nocount on;

--Load the overriding guids into a table variable

declare @GUIDS table ([GUID] uniqueidentifier)
insert into @GUIDS
select    TGS.TG.value('@value', 'uniqueidentifier')
from @TASKGUIDXML.nodes('/guids/guid') TGS(TG)

declare @ISADMIN bit
set @ISADMIN = isnull((select 1 from dbo.CLIENTUSERS c where c.ID = @CLIENTUSERSID and (c.INTERNALUSER = 1 or c.ISSUPERVISOR = 1)),0)

--determine if we have rights to the organization 'site' (site id of null)

declare @RIGHTSTOORG bit
set @RIGHTSTOORG = isnull((select distinct 1 from dbo.UFN_CLIENTUSERS_TASKS(@CLIENTUSERSID, null) t where t.CLIENTSITESID is null and t.ISSITETASK = 1),0)

if @GETALLCLIENTSITESWITHANYTASK = 1 and @ISADMIN = 0 and @RIGHTSTOORG = 0
begin
    declare @SITES table ([ID] int, [HASRIGHTS] bit)

    insert into @SITES
    select distinct CS.ID, 1
    from dbo.CLIENTSITES CS
    inner join dbo.UFN_CLIENTUSERS_TASKS(@CLIENTUSERSID, null) T on T.CLIENTSITESID = CS.ID

    insert into @SITES
    select distinct P.ID, 0
    from @SITES S
    cross apply dbo.UFN_CLIENTSITE_PARENTIDS(S.ID) P
    left outer join @SITES S2 on S2.ID = P.ID
    where S2.ID is null

    select CS.ID, CS.Name, CS.Deleted, CS.Guid, CS.ParentSiteID, S.HASRIGHTS, dbo.UFN_CLIENTSITE_ISPUBLISHED(CS.ID) PUBLISHED
    from @SITES S
    inner join dbo.ClientSites CS on CS.ID = S.ID    
    order by CS.Name
end
else
begin

    --Determine if we have any of these guids for ALL sites

    declare @RIGHTSINALLSITES bit
    set @RIGHTSINALLSITES = (select 1 where EXISTS(select 1
                            from @GUIDS G
                            inner join dbo.UFN_CLIENTUSERS_TASKS(@CLIENTUSERSID, null) T on T.TASKGUID = G.[GUID]
                            where T.CLIENTSITESID is null))

    if @RIGHTSINALLSITES = 1 or @ISADMIN = 1 or (@GETALLCLIENTSITESWITHANYTASK = 1 and @RIGHTSTOORG = 1)
    begin
        select CS.ID, CS.Name, CS.Deleted, CS.Guid, CS.ParentSiteID, 1, dbo.UFN_CLIENTSITE_ISPUBLISHED(CS.ID) PUBLISHED
        from dbo.ClientSites CS
        order by CS.Name
    end
    else
    begin
        declare @RESULTS table ([ID] int, [HASRIGHTS] bit)

        insert into @RESULTS
        select DISTINCT T.CLIENTSITESID, 1
        from @GUIDS G
        inner join dbo.UFN_CLIENTUSERS_TASKS(@CLIENTUSERSID, null) T on T.TASKGUID = G.[GUID]

        insert into @RESULTS
        select distinct P.ID, 0
        from @RESULTS R
        cross apply dbo.UFN_CLIENTSITE_PARENTIDS(R.ID) P
        left outer join @RESULTS R2 on R2.ID = P.ID
        where R2.ID is null

        select CS.ID, CS.Name, CS.Deleted, CS.Guid, CS.ParentSiteID, R.HASRIGHTS, dbo.UFN_CLIENTSITE_ISPUBLISHED(CS.ID) PUBLISHED
        from @RESULTS R
        inner join dbo.ClientSites CS on CS.ID = R.ID    
        order by CS.Name
    end
end