UFN_PROXYUSER_CHECKBRANCHHIERARCHYPERMISSION
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PROXYOWNERID | uniqueidentifier | IN | |
@SYSTEMROLEID | uniqueidentifier | IN | |
@BRANCHSITEID | uniqueidentifier | IN |
Definition
Copy
create function dbo.UFN_PROXYUSER_CHECKBRANCHHIERARCHYPERMISSION(
@PROXYOWNERID uniqueidentifier,
@SYSTEMROLEID uniqueidentifier,
@BRANCHSITEID uniqueidentifier
)
returns bit
with execute as caller
as begin
declare @SITESHIERARCHYTABLE table (SITEID uniqueidentifier,PARENTSITEID uniqueidentifier);
declare @SITESLEVEL table (PARENTSITEID uniqueidentifier, SITEID uniqueidentifier);
declare @SELECTEDSITES table (SITEID uniqueidentifier);
declare @COUNT int;
declare @RETURN bit;
set @RETURN=0;
--1.get the hierarchy of all the sites
insert into @SITESHIERARCHYTABLE(SITEID,PARENTSITEID)
select
SITE.ID as SITEID,
(select
PARENTSITE.ID
from
dbo.SITE AS PARENTSITE
where
SITE.HIERARCHYPATH.GetAncestor(1) = PARENTSITE.HIERARCHYPATH
) as PARENTSITEID
from dbo.SITE
order by HIERARCHYPATH;
--2.Get all the levels of sites that proxy users selected
;with SITEPERMISSION (PARENTSITEID, SITEID)
AS
(
select SITESHIERARCHYTABLE.PARENTSITEID ,
SITESHIERARCHYTABLE.SITEID
from
@SITESHIERARCHYTABLE as SITESHIERARCHYTABLE
where SITEID = @BRANCHSITEID
union all
select SITESHIERARCHYTABLE.PARENTSITEID ,
SITESHIERARCHYTABLE.SITEID
from @SITESHIERARCHYTABLE SITESHIERARCHYTABLE
inner join
SITEPERMISSION as SITEPERMISSION on SITESHIERARCHYTABLE.SITEID = SITEPERMISSION.PARENTSITEID
)
insert into @SITESLEVEL
select SITEPERMISSION.PARENTSITEID, SITEPERMISSION.SITEID from SITEPERMISSION;
select @COUNT=count(distinct SITEPERMISSION.SITEID) from @SITESLEVEL as SITEPERMISSION
inner join SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.BRANCHSITEID = SITEPERMISSION.SITEID
where SYSTEMROLEAPPUSER.APPUSERID=@PROXYOWNERID;
--if we need to go upward in the tree
if(@COUNT = 0)
begin
delete from @SITESLEVEL;
;with SITEPERMISSION (PARENTSITEID, SITEID)
AS
(
select SITESHIERARCHYTABLE.PARENTSITEID ,
SITESHIERARCHYTABLE.SITEID
from @SITESHIERARCHYTABLE as SITESHIERARCHYTABLE
where PARENTSITEID = @BRANCHSITEID
union all
select SITESHIERARCHYTABLE.PARENTSITEID,
SITESHIERARCHYTABLE.SITEID
from @SITESHIERARCHYTABLE SITESHIERARCHYTABLE
inner join
SITEPERMISSION as SITEPERMISSION ON SITESHIERARCHYTABLE.PARENTSITEID =SITEPERMISSION.SITEID
)
insert into @SITESLEVEL
select distinct SITEPERMISSION.PARENTSITEID, SITEPERMISSION.SITEID from SITEPERMISSION;
select @COUNT=count(distinct SITEPERMISSION.SITEID) from @SITESLEVEL as SITEPERMISSION
inner join SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.BRANCHSITEID = SITEPERMISSION.SITEID
where SYSTEMROLEAPPUSER.APPUSERID=@PROXYOWNERID;
end
if @COUNT > 0
set @RETURN = 1;
return @RETURN;
end