江西广告网

标题: SQL Server如何得到用户的继承列表 [打印本页]

作者: 900wwj    时间: 2009-1-13 15:35
标题: SQL Server如何得到用户的继承列表
  在实际开发中,尤其是在做权限管理的时候,常常要对对某个用户的权限进行检索,本文给出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时使用 <




欢迎光临 江西广告网 (http://bbs.jxadw.com/) Powered by Discuz! X3.2