选择具有更高视图,写入,执行权限的独特的[用户角色]

时间:2019-01-31 07:57:46

标签: sql-server tsql

我的用户具有[角色],具有[查看] | [编辑] | [执行]权限(均为[位]列)。
每个用户也可以属于[UserGroup],并且已定义了自己的角色。

我所拥有的:

将两个结果合并后,我从每个表中获得了重复的角色。

Duplicated Roles

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行,但将“查看|编辑|执行”权限设置为具有较高权限的那一行。

Expected Roles

1 个答案:

答案 0 :(得分:2)

GROUP BYMAX预先转换为BIT的{​​{1}}一起使用。

INT