UFN_ADHOCQUERY_USERHASRIGHTSTOQUERYVIEWS

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@APPUSERID uniqueidentifier IN
@QUERYDEFINITIONXML xml IN

Definition

Copy


CREATE function dbo.UFN_ADHOCQUERY_USERHASRIGHTSTOQUERYVIEWS
(
    @APPUSERID uniqueidentifier, 
    @QUERYDEFINITIONXML xml
)
returns bit
as
begin
    declare @RETURNVALUE bit;
    declare @ISSYSADMIN bit;
    declare @HASQUERYVIEWSYSTEMPRIVILEGE bit = 0;

    select @ISSYSADMIN = ISSYSADMIN from dbo.APPUSER where ID = @APPUSERID;

    if @ISSYSADMIN = 0
        select @HASQUERYVIEWSYSTEMPRIVILEGE = dbo.UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE(@APPUSERID, '5f9bbcaf-9c67-4539-9880-ae4f709a9c1f');

    if (@ISSYSADMIN = 0 and @HASQUERYVIEWSYSTEMPRIVILEGE = 0)
    begin
        declare @OKVIEWS table (OBJECTNAME nvarchar(128));

        insert into @OKVIEWS (OBJECTNAME)
        select 
            QUERYVIEWCATALOG.OBJECTNAME 
        from 
            dbo.QUERYVIEWCATALOG
        where 
            exists 
            (
                select 
                    [OKVIEWS].QUERYVIEWCATALOGID 
                from 
                    dbo.UFN_SECURITY_GETGRANTEDQUERYVIEWSFORUSER(@APPUSERID) as [OKVIEWS] 
                where 
                    [OKVIEWS].QUERYVIEWCATALOGID = QUERYVIEWCATALOG.ID
            );

        if exists 
        (
            select 
                [QUERYVIEWSINUSE].OBJECTNAME 
            from
                dbo.UFN_ADHOCQUERY_QUERYVIEWSINUSE(@QUERYDEFINITIONXML) as [QUERYVIEWSINUSE]
            where 
                not exists 
                (
                    select 
                        [OKVIEWS].OBJECTNAME 
                    from 
                        @OKVIEWS as [OKVIEWS] 
                    where 
                        [OKVIEWS].OBJECTNAME = [QUERYVIEWSINUSE].OBJECTNAME)
        )
        begin
            set @RETURNVALUE = 0;
        end
        else
        begin
            set @RETURNVALUE = 1;
        end;
    end
    else
    begin
        set @RETURNVALUE = 1;
    end;

    return @RETURNVALUE;

end;