Скрипт выводит список Объектов входящие в группы с разным набором прав для имени пользователя
Код
use bn
create TABLE #Result
(
ObjectID int
,ObjectGroupeID int
,RightForObject int
,RightForGroup int
,FinalRight int
)
Declare @DefRight int, @userid int
Set @DefRight = 1
set @UserID=(select [id]from [dbo].[SYS_Users] where name='bondar') -- пользователь bondar
Select
@DefRight = isnull(cast(Opt_Value as int), 1)
from bn.dbo.SYS_GlobalOptions GO
where
GO.Opt = 'DefaultRight'
Insert into #Result
Select
TOB.ObjectID,TOR.ObjectGroupeID as ObjectGroupeID
,min(TOUR.RightID) as "RightForObject"
,min(TGURR.RightID) as "RightForGroup"
,coalesce(min(TOUR.RightID), min(TGURR.RightID), @DefRight) as "FinalRight"
from bn.dbo.FLEET_Object TOB with(nolock)
left join bn.dbo.FLEET_ObjectRelation TOR with(nolock) on TOR.ObjectID = TOB.ObjectID
left join bn.dbo.FLEET_ObjectUserRelation TOUR with(nolock) on
TOUR.ObjectID = TOB.ObjectID
and TOUR.id = @UserID
left join bn.dbo.FLEET_GrUsersRightRelation TGURR with(nolock) on
TGURR.ObjectGroupeID = TOR.ObjectGroupeID
and TGURR.id = @UserID
where
TOB.ObjectActive = 1
group by TOB.ObjectID, TOR.ObjectGroupeID
order by TOB.ObjectID
select g.ObjectGroupeName Группа, tob.ObjectGarNum ГарНум, riO.RightName RightForObjectName, rig.RightName RightForGroupName from #Result as r
inner join bn.dbo.FLEET_Object TOB on tob.ObjectID=r.ObjectID
left join bn.[dbo].[FLEET_ObjectGroupe] as G on g.ObjectGroupeID=r.ObjectGroupeID
left join bn.[dbo].[FLEET_Rights] as riO on rio.RightID=r.RightForObject
left join bn.[dbo].[FLEET_Rights] as riG on rig.RightID=r.RightForGroup
where r.ObjectID in (select ObjectID from #Result as r where r.RightForGroup<>r.RightForObject)
drop table #Result
на выходе таблица:
1. Имя группы
2. Гаражный номер
3. Набор прав для ТС (из всех групп)
4. Набор прав для группы
Показывается только список ТС, для которых наборы прав для группы отличаются от набора прав для ТС