UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYFOLDER_IN_SYSTEMROLE

Returns true if user has been granted and not denied permission to edit the ad-hoc query instance for a system role.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@APPUSERID uniqueidentifier IN
@ADHOCQUERYFOLDERID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYFOLDER_IN_SYSTEMROLE
(
    @APPUSERID uniqueidentifier,
    @ADHOCQUERYFOLDERID uniqueidentifier
)
  returns bit
as
  /*
  Returns true if user has been granted and not denied permission to edit the ad-hoc query folder for a System Role.
  */
begin
    --If at least one grant and no deny then return true

    --otherwise, false

    declare @GRANT bit;
    set @GRANT = 0;

    -- note that this routine assumes the check for SysAdmin has been performed already


    -- check to see if the query has been granted to everyone

    declare @SECURITYLEVEL tinyint;
    declare @OWNERID uniqueidentifier;

    set @SECURITYLEVEL = 0
    select 
        @SECURITYLEVEL = SECURITYLEVELCODE,
        @OWNERID = OWNERID
    from dbo.ADHOCQUERYFOLDER (nolock) where ID = @ADHOCQUERYFOLDERID;

    if (@OWNERID = @APPUSERID) or (@SECURITYLEVEL = 0) -- All users

        set @GRANT = 1;

    -- the query folder has not been granted to everyone; check to see if the user has been 

    -- granted (and not denied) explicit rights to the ad-hoc query folder.

    if @GRANT = 0
    begin
        --order by GRANTORDENY, deny will be first.

        select top 1 
            @GRANT = SECURITYVIEWFOLDER.GRANTORDENY
        from dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_ADHOCQUERYFOLDER (nolock) SECURITYVIEWFOLDER
        inner join dbo.ADHOCQUERYFOLDER (nolock) on SECURITYVIEWFOLDER.ADHOCQUERYFOLDERID = ADHOCQUERYFOLDER.ID
        where 
            (SECURITYVIEWFOLDER.APPUSERID = @APPUSERID) and 
            (SECURITYVIEWFOLDER.ADHOCQUERYFOLDERID = @ADHOCQUERYFOLDERID)
        order by 
        SECURITYVIEWFOLDER.GRANTORDENY asc;
    end;

    return @GRANT;
end