UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBATCH

Returns a table of ConstituentIDs for which the user has been granted the batch according to the role security groups.

Return

Return Type
table

Parameters

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

Definition

Copy


            CREATE function dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBATCH
            (
                @APPUSERID uniqueidentifier,
                @BATCHID uniqueidentifier
            )
            returns TABLE as

            /*
            Returns a row for every constituent that the the user has rights to according to record access security.


            This function is optimized for use from the Blackbaud.AppFx.Security.Catalog.ConstitRecordSecurityService
            class which implements the RecordSecurity service for Constituent record security.

            As such, it assumes that a check for DENY occurs outside this function
            and also assumes that a check for if the user is ISSYSADMIN occurs outside 
            this function.  

            It also assumes a check for UFN_SECURITY_APPUSER_GRANTED_BATCH_IN_NONRACROLE 
            occurs outside this function. If that function returns true there is no need to join to this TVF.

            */

            RETURN

            (

            select 
                CSAA.CONSTITUENTID AS ID 
            from 
                dbo.CONSTIT_SECURITY_ATTRIBUTE_ASSIGNMENT as CSAA
            WHERE
                CSAA.CONSTIT_SECURITY_ATTRIBUTEID IN 
                        (
                            select 
                                SYSTEMROLEAPPUSERCONSTITUENTSECURITY.CONSTITUENTSECURITYATTRIBUTEID
                            from 
                                dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATE as SV
                                    with (NOEXPAND, INDEX(IX_V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATE_BATCHTEMPLATEID_APPUSERID))                                
                                inner join dbo.BATCH on BATCH.BATCHTEMPLATEID = SV.BATCHTEMPLATEID
                                inner join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.SYSTEMROLEID = SV.SYSTEMROLEID
                                inner join dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY on SYSTEMROLEAPPUSERCONSTITUENTSECURITY.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID
                            where 
                                SV.APPUSERID = @APPUSERID and
                                BATCH.ID = @BATCHID and
                                SV.GRANTORDENY = 1 and
                                SV.RECORDSECURITYMODE = 2 and
                                SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID                                
                            union all                
                            select 
                                SYSTEMROLEAPPUSERCONSTITUENTSECURITY.CONSTITUENTSECURITYATTRIBUTEID
                            from 
                                dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTYPE as SV
                                inner join dbo.BATCHTEMPLATE on BATCHTEMPLATE.BATCHTYPECATALOGID = SV.BATCHTYPECATALOGID
                                inner join dbo.BATCH on BATCH.BATCHTEMPLATEID = BATCHTEMPLATE.ID                                
                                inner join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.SYSTEMROLEID = SV.SYSTEMROLEID
                                inner join dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY on SYSTEMROLEAPPUSERCONSTITUENTSECURITY.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID
                            where 
                                SV.APPUSERID = @APPUSERID and 
                                BATCH.ID = @BATCHID and 
                                SV.GRANTORDENY = 1 and
                                SV.RECORDSECURITYMODE = 2 and
                                SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID
                            union all
                            select 
                                SYSTEMROLEAPPUSERCONSTITUENTSECURITY.CONSTITUENTSECURITYATTRIBUTEID
                            from 
                                dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHWORKFLOWSTATE as SV
                                    with (NOEXPAND, INDEX(IX_V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHWORKFLOWSTATE_BATCHWORKFLOWSTATEID_APPUSERID))                                
                                inner join dbo.BATCH on BATCH.BATCHWORKFLOWSTATEID = SV.BATCHWORKFLOWSTATEID                                
                                inner join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.SYSTEMROLEID = SV.SYSTEMROLEID
                                inner join dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY on SYSTEMROLEAPPUSERCONSTITUENTSECURITY.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID
                            where 
                                SV.APPUSERID=@APPUSERID AND
                                BATCH.ID=@BATCHID AND
                                SV.GRANTORDENY=1 and
                                SV.RECORDSECURITYMODE = 2 and
                                SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID            
                            union all
                            select 
                                SYSTEMROLEAPPUSERCONSTITUENTSECURITY.CONSTITUENTSECURITYATTRIBUTEID
                            from 
                                dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHPROCESSOR as SV
                                    with (NOEXPAND, INDEX(IX_V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATEPROCESSOR_BATCHTEMPLATEID_APPUSERID))                                
                                inner join dbo.BATCH on BATCH.BATCHTEMPLATEID = SV.BATCHTEMPLATEID                                
                                inner join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.SYSTEMROLEID = SV.SYSTEMROLEID
                                inner join dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY on SYSTEMROLEAPPUSERCONSTITUENTSECURITY.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID
                            where 
                                SV.APPUSERID=@APPUSERID and
                                BATCH.ID=@BATCHID and
                                SV.GRANTORDENY=1 and
                                SV.RECORDSECURITYMODE = 2 and
                                SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID            
                        union all
                            select 
                                SYSTEMROLEAPPUSERCONSTITUENTSECURITY.CONSTITUENTSECURITYATTRIBUTEID
                            from 
                                dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATEAPPROVER as SV
                                    with (NOEXPAND, INDEX(IX_V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATEAPPROVER_BATCHTEMPLATEID_APPUSERID))                                
                                inner join dbo.BATCH on BATCH.BATCHTEMPLATEID = SV.BATCHTEMPLATEID                                
                                inner join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.SYSTEMROLEID = SV.SYSTEMROLEID
                                inner join dbo.SYSTEMROLEAPPUSERCONSTITUENTSECURITY on SYSTEMROLEAPPUSERCONSTITUENTSECURITY.SYSTEMROLEAPPUSERID = SYSTEMROLEAPPUSER.ID
                            where 
                                SV.APPUSERID=@APPUSERID and
                                BATCH.ID=@BATCHID and
                                SV.GRANTORDENY=1 and
                                SV.RECORDSECURITYMODE = 2 and
                                SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID            
                        )

            UNION ALL

            --Constits with no security attributes if the user in a role with security mode = 1

            select 
                ID 
            from 
                dbo.CONSTITUENT
            where exists
                (
                    select 
                        1
                    from 
                        dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATE as SV
                            with (NOEXPAND, INDEX(IX_V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATE_BATCHTEMPLATEID_APPUSERID))
                        inner join dbo.BATCH on SV.BATCHTEMPLATEID = BATCH.BATCHTEMPLATEID                                        
                    WHERE
                        SV.APPUSERID = @APPUSERID 
                        AND BATCH.ID = @BATCHID
                        AND SV.GRANTORDENY = 1
                        AND SV.RECORDSECURITYMODE = 1
                union all                
                    select 
                        1
                    from 
                        dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTYPE as SV
                        inner join dbo.BATCHTEMPLATE on BATCHTEMPLATE.BATCHTYPECATALOGID = SV.BATCHTYPECATALOGID
                        inner join dbo.BATCH on BATCH.BATCHTEMPLATEID = BATCHTEMPLATE.ID                                
                    where 
                        SV.APPUSERID = @APPUSERID 
                        AND BATCH.ID = @BATCHID
                        AND SV.GRANTORDENY = 1
                        AND SV.RECORDSECURITYMODE = 1
                union all
                    select 
                        1
                    from 
                        dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHWORKFLOWSTATE as SV
                            with (NOEXPAND, INDEX(IX_V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHWORKFLOWSTATE_BATCHWORKFLOWSTATEID_APPUSERID))                                
                        inner join dbo.BATCH on BATCH.BATCHWORKFLOWSTATEID = SV.BATCHWORKFLOWSTATEID                                
                    where 
                        SV.APPUSERID=@APPUSERID 
                        AND BATCH.ID=@BATCHID
                        AND SV.GRANTORDENY=1
                        AND SV.RECORDSECURITYMODE=1
                union all
                    select 
                        1
                    from
                        dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHPROCESSOR as SV
                            with (NOEXPAND,INDEX(IX_V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATEPROCESSOR_BATCHTEMPLATEID_APPUSERID))                                
                        inner join dbo.BATCH on BATCH.BATCHTEMPLATEID = SV.BATCHTEMPLATEID                                
                    where 
                        SV.APPUSERID = @APPUSERID AND 
                        BATCH.ID = @BATCHID AND 
                        SV.GRANTORDENY = 1 AND 
                        SV.RECORDSECURITYMODE = 1
                union all
                    select 
                        1
                    from 
                        dbo.V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATEAPPROVER as SV
                            with (NOEXPAND, INDEX(IX_V_SECURITY_SYSTEMROLEASSIGNMENT_USER_BATCHTEMPLATEAPPROVER_BATCHTEMPLATEID_APPUSERID))                                
                        inner join dbo.BATCH on BATCH.BATCHTEMPLATEID = SV.BATCHTEMPLATEID                                
                    where 
                        SV.APPUSERID = @APPUSERID AND 
                        BATCH.ID = @BATCHID AND 
                        SV.GRANTORDENY = 1 AND 
                        SV.RECORDSECURITYMODE = 1
                )                
                AND                
                ID NOT IN
                (
                    select 
                        CSAA.CONSTITUENTID 
                    from 
                        dbo.CONSTIT_SECURITY_ATTRIBUTE_ASSIGNMENT as CSAA
                )
            )