UFN_SYSTEMROLEAPPUSER_SITEPERMISSION
Returns a table of sites within the site hierarchy that the application user has been granted by a system role.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@APPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_SYSTEMROLEAPPUSER_SITEPERMISSION
(
@APPUSERID uniqueidentifier
)
returns @SITEPERMISSION table (SYSTEMROLEID uniqueidentifier, SYSTEMROLENAME nvarchar(255), SITEID uniqueidentifier, SITENAME nvarchar(1024), HIERARCHYPATH hierarchyid, SYSTEMROLEAPPUSERID uniqueidentifier, APPUSERID uniqueidentifier)
with SCHEMABINDING
as
begin
/*
This function will only return site permissions when the security mode is set to access data based on specific sites.
It is assumed that the caller will check for the IsSysAdmin and site security mode values outside of this function.
*/
/*Walk down the branch for all selected sites*/
with
SITE_HIERACHY_CTE as
(
select
SITE.NAME,
SITE.ID,
PARENTSITE.ID as PARENTID,
SITE.HIERARCHYPATH
from
dbo.SITE
inner join dbo.SITE as PARENTSITE on PARENTSITE.HIERARCHYPATH = SITE.HIERARCHYPATH.GetAncestor(1)
),
ASSIGNED_SITES_CTE as
(
select
SYSTEMROLE.ID as SYSTEMROLEID,
SYSTEMROLE.NAME as SYSTEMROLENAME,
SITE.ID as SITEID,
SITE.NAME as SITENAME,
SITE.HIERARCHYPATH,
SYSTEMROLEAPPUSER.ID as SYSTEMROLEAPPUSERID,
SYSTEMROLEAPPUSER.APPUSERID
from
dbo.SYSTEMROLEAPPUSERSITE
inner join dbo.SITE on SITE.ID = SYSTEMROLEAPPUSERSITE.SITEID
inner join dbo.SYSTEMROLEAPPUSER on SYSTEMROLEAPPUSER.ID = SYSTEMROLEAPPUSERSITE.SYSTEMROLEAPPUSERID
inner join dbo.SYSTEMROLE on SYSTEMROLEAPPUSER.SYSTEMROLEID = SYSTEMROLE.ID
where
(SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID OR @APPUSERID is null) and
SYSTEMROLEAPPUSER.SECURITYMODECODE = 2
union all
select
ASSIGNED_SITES_CTE.SYSTEMROLEID,
ASSIGNED_SITES_CTE.SYSTEMROLENAME,
SITE_HIERACHY_CTE.ID,
SITE_HIERACHY_CTE.NAME,
SITE_HIERACHY_CTE.HIERARCHYPATH,
ASSIGNED_SITES_CTE.SYSTEMROLEAPPUSERID,
ASSIGNED_SITES_CTE.APPUSERID
from
ASSIGNED_SITES_CTE
inner join SITE_HIERACHY_CTE on SITE_HIERACHY_CTE.PARENTID = ASSIGNED_SITES_CTE.SITEID
)
insert into @SITEPERMISSION(SYSTEMROLEID, SYSTEMROLENAME, SITEID, SITENAME, HIERARCHYPATH, SYSTEMROLEAPPUSERID, APPUSERID)
select SYSTEMROLEID, SYSTEMROLENAME, SITEID, SITENAME, HIERARCHYPATH, SYSTEMROLEAPPUSERID, APPUSERID from ASSIGNED_SITES_CTE;
/*Walk down the hierarchy branch of the selected branch site*/
with
SITE_HIERACHY_CTE as
(
select
SITE.NAME,
SITE.ID,
PARENTSITE.ID as PARENTID,
SITE.HIERARCHYPATH
from
dbo.SITE
inner join dbo.SITE as PARENTSITE on PARENTSITE.HIERARCHYPATH = SITE.HIERARCHYPATH.GetAncestor(1)
),
ASSIGNED_SITES_CTE as
(
select
SYSTEMROLE.ID as SYSTEMROLEID,
SYSTEMROLE.NAME as SYSTEMROLENAME,
SITE.ID as SITEID,
SITE.NAME as SITENAME,
SITE.HIERARCHYPATH,
SYSTEMROLEAPPUSER.ID as SYSTEMROLEAPPUSERID,
SYSTEMROLEAPPUSER.APPUSERID
from
dbo.SYSTEMROLEAPPUSER
inner join dbo.SITE on SITE.ID = SYSTEMROLEAPPUSER.BRANCHSITEID
inner join dbo.SYSTEMROLE on SYSTEMROLEAPPUSER.SYSTEMROLEID = SYSTEMROLE.ID
where
(SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID OR @APPUSERID is null) and
SYSTEMROLEAPPUSER.SECURITYMODECODE = 3
union all
select
ASSIGNED_SITES_CTE.SYSTEMROLEID,
ASSIGNED_SITES_CTE.SYSTEMROLENAME,
SITE_HIERACHY_CTE.ID,
SITE_HIERACHY_CTE.NAME,
SITE_HIERACHY_CTE.HIERARCHYPATH,
ASSIGNED_SITES_CTE.SYSTEMROLEAPPUSERID,
ASSIGNED_SITES_CTE.APPUSERID
from
ASSIGNED_SITES_CTE
inner join SITE_HIERACHY_CTE on SITE_HIERACHY_CTE.PARENTID = ASSIGNED_SITES_CTE.SITEID
)
insert into @SITEPERMISSION(SYSTEMROLEID, SYSTEMROLENAME, SITEID, SITENAME, HIERARCHYPATH, SYSTEMROLEAPPUSERID, APPUSERID)
select SYSTEMROLEID, SYSTEMROLENAME, SITEID, SITENAME, HIERARCHYPATH, SYSTEMROLEAPPUSERID, APPUSERID from ASSIGNED_SITES_CTE;
/*Walk up the hierarchy branch of the selected branch site*/
with BRANCH_CTE as
(
select
SYSTEMROLE.ID as SYSTEMROLEID,
SYSTEMROLE.NAME as SYSTEMROLENAME,
PARENTSITE.ID as SITEID,
PARENTSITE.NAME as SITENAME,
PARENTSITE.HIERARCHYPATH,
SYSTEMROLEAPPUSER.ID as SYSTEMROLEAPPUSERID,
SYSTEMROLEAPPUSER.APPUSERID,
PARENTSITE.HIERARCHYPATH.GetAncestor(1) as PARENTHIERARCHYID
from
dbo.SYSTEMROLEAPPUSER
inner join dbo.SITE on SITE.ID = SYSTEMROLEAPPUSER.BRANCHSITEID
inner join dbo.SYSTEMROLE on SYSTEMROLEAPPUSER.SYSTEMROLEID = SYSTEMROLE.ID
left outer join dbo.SITE as PARENTSITE on PARENTSITE.HIERARCHYPATH = SITE.HIERARCHYPATH.GetAncestor(1)
where
(SYSTEMROLEAPPUSER.APPUSERID = @APPUSERID OR @APPUSERID is null) and
SYSTEMROLEAPPUSER.SECURITYMODECODE = 3 and
SITE.HIERARCHYPATH.GetAncestor(1) <> hierarchyid::GetRoot()
union all
select
BRANCH_CTE.SYSTEMROLEID,
BRANCH_CTE.SYSTEMROLENAME,
SITE.ID,
SITE.NAME,
SITE.HIERARCHYPATH,
BRANCH_CTE.SYSTEMROLEAPPUSERID,
BRANCH_CTE.APPUSERID,
SITE.HIERARCHYPATH.GetAncestor(1)
from
BRANCH_CTE
inner join dbo.SITE on SITE.HIERARCHYPATH = BRANCH_CTE.PARENTHIERARCHYID
where
BRANCH_CTE.PARENTHIERARCHYID <> hierarchyid::GetRoot()
)
insert into @SITEPERMISSION(SYSTEMROLEID, SYSTEMROLENAME, SITEID, SITENAME, HIERARCHYPATH, SYSTEMROLEAPPUSERID, APPUSERID)
select SYSTEMROLEID, SYSTEMROLENAME, SITEID, SITENAME, HIERARCHYPATH, SYSTEMROLEAPPUSERID, APPUSERID from BRANCH_CTE
return
end