USP_SYSTEMROLEAPPUSER_DELETE

Executes the "System Role: Remove User from role" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN Input parameter indicating the ID of the record being deleted.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the delete.

Definition

Copy


CREATE procedure dbo.USP_SYSTEMROLEAPPUSER_DELETE
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier
)
as

set nocount on;

    declare @PROXYCOUNT tinyint = 0;
    declare @LISTCOUNT tinyint = 1;
    declare @SYSTEMROLEID uniqueidentifier;
    declare @PROXYUSERIDLIST table (PROXYCOUNT int identity(1,1), PROXYSYSTEMROLEAPPUSERID uniqueidentifier);
    declare @APPUSERID uniqueidentifier;
    declare @SYSTEMROLEAPPUSERIDPROXY uniqueidentifier;
    declare @PROXYOWNERID uniqueidentifier;
    declare @ISSYSADMIN bit = 0;

    select @PROXYCOUNT = count(1) from dbo.APPUSER join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.APPUSERID =APPUSER.PROXYOWNERID where SYSTEMROLEAPPUSER.ID = @ID;
    select @PROXYOWNERID = APPUSER.PROXYOWNERID from dbo.APPUSER join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.APPUSERID = APPUSER.PROXYOWNERID where SYSTEMROLEAPPUSER.ID = @ID;
    select @ISSYSADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@PROXYOWNERID);

    select
      @SYSTEMROLEID = SYSTEMROLEID,
      @APPUSERID = APPUSERID
    from dbo.SYSTEMROLEAPPUSER where SYSTEMROLEAPPUSER.ID = @ID;

    --if proxy owner is not a system admin then delete the corresponding proxy user roles

    if @ISSYSADMIN = 0
        begin
            if @PROXYCOUNT > 0
                begin
                    insert into @PROXYUSERIDLIST
                    select
                      SYSTEMROLEAPPUSER.ID
                    from dbo.SYSTEMROLEAPPUSER
                    inner join dbo.APPUSER on APPUSER.ID = SYSTEMROLEAPPUSER.APPUSERID
                    where APPUSER.PROXYOWNERID = @APPUSERID and SYSTEMROLEAPPUSER.SYSTEMROLEID = @SYSTEMROLEID;

                    while (@LISTCOUNT <= @PROXYCOUNT)
                    begin
                        select @SYSTEMROLEAPPUSERIDPROXY = PROXYLIST.PROXYSYSTEMROLEAPPUSERID from @PROXYUSERIDLIST PROXYLIST where PROXYLIST.PROXYCOUNT = @LISTCOUNT;

                        exec dbo.USP_SYSTEMROLEAPPUSER_DELETEBYID_WITHCHANGEAGENTID @SYSTEMROLEAPPUSERIDPROXY, @CHANGEAGENTID;

                        set @LISTCOUNT = @LISTCOUNT + 1;
                    end
                end
        end
    exec dbo.USP_SYSTEMROLEAPPUSER_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
return 0;