SQL Server如何得到用户的继承列表 选择自 liufuyahong 的 Blog

 

在实际开发中,尤其是在做权限管理的时候,常常要对对某个用户的权限进行检索,本文给出SQL Server中的一个实例.

--用户继承树
CREATE function getUserTree(@UserName sysname,  --用户名
                           @Seq bit     --查找方式:0查找子孙  1.查找祖先
                           )
  returns @Result table(UserID sysname,UserName sysname,Level int)
as
begin
    declare @UserId sysname
    set @userId=user_id(@userName)   
   
    if @userid is null
    begin
      --raiserror('指定的用户名不存在',16,1)
      return
    end
   
 DECLARE @level int, @line char(20)
 declare @stack table(item sysname, level int)
 INSERT INTO @stack VALUES (@UserID, 1)
 SELECT @level = 1
 
 WHILE @level > 0
 BEGIN
    IF EXISTS (SELECT * FROM @stack WHERE level = @level)
       BEGIN
          SELECT @userId = item
          FROM @stack
          WHERE level = @level
             insert into @Result values(@UserId,User_name(@userID),@level)

          DELETE FROM @stack
          WHERE level = @level
             AND item = @userId
            
             if @Seq=1  --查找祖先
              INSERT @stack
                SELECT groupuid, @level + 1
                FROM sysmembers
                WHERE memberuid = @userId
             else  --查找子孙
              INSERT @stack
                SELECT memberuid, @level + 1
                FROM sysmembers
                WHERE groupuid = @userId

          IF @@ROWCOUNT > 0
             SELECT @level = @level + 1
       END
    ELSE
       SELECT @level = @level - 1
 END -- WHILE    
   
  return
end

实例:
exec sp_addrole 'Users'
exec sp_addrole 'BusinessMan'
exec sp_addrolemember 'Users','BusinessMan'
exec sp_addrole 'Saler'
exec sp_addrolemember 'BusinessMan','Saler'

exec sp_addlogin 'OrderMan','OrderMan','lifeng'
exec sp_addrolemember 'Saler','OrderMan'
exec sp_grantdbaccess 'OrderMan','OrderMan'
select * from getUserTree('OrderMan',1)

结果显示
UserID   USRENAME     Level
5              OrderMan          1
16402     Saler                  2
16401     BusinessMan  3
16403     Users                4

这种方法,也在MRP/ERP系统中遍历BOM时使用

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值