我的用户具有[角色],具有[查看] | [编辑] | [执行]权限(均为[位]列)。
每个用户也可以属于[UserGroup],并且已定义了自己的角色。
我所拥有的:
将两个结果合并后,我从每个表中获得了重复的角色。
declare @Roles TABLE
(
RoleId int,
RoleCode nvarchar(max),
CanView bit,
CanEdit bit,
CanExecute bit
)
insert into @Roles (RoleId, RoleCode, CanView, CanEdit, CanExecute)
select t.RoleId, t.RoleCode, t.CanView, t.CanEdit, t.CanExecute from (
-- Get User Roles
select R.Id as 'RoleId', R.CodeName as 'RoleCode', U.CanView, U.CanEdit, U.CanExecute from TM.dbo.UserRoles U
left join TM.dbo.Roles R on U.RoleId = R.Id
where U.UserId = @UserId
union
-- Get User Group Roles
select R.Id as 'RoleId', R.CodeName as 'RoleCode', GR.CanView, GR.CanEdit, GR.CanExecute from TM.dbo.Roles R
inner join TM.dbo.GroupRoles GR on R.Id = GR.RoleId
inner join TM.dbo.UserGroups UG on GR.GroupId = UG.GroupId
where UG.UserId = @UserId
) as t
select * from @Roles
预期结果:
每个角色的结果应包含1行,但将“查看|编辑|执行”权限设置为具有较高权限的那一行。
答案 0 :(得分:2)
将GROUP BY
与MAX
预先转换为BIT
的{{1}}一起使用。
INT