我出个法。为每张业务表建立一个权限字段varchar类型,里面存储所有参与该项目的人员清单,以逗号分隔。如果一个人只有一个上司,在用户表里,新建一个字段,为上司名称。
如果一个人对应多个上司,新建一张表,存储每个用户的所有上司。建一个视图,查询到的内容为每个用户本人以及其下属的用户ID清单。(这一步并不困难)最后:
当charindex(视图的用户ID字段+',',业务表的权限字段) > 0 表示有权限,否则无权限

解决方案 »

  1.   

    修正一下:为每张业务表建立一个权限字段varchar类型,里面存储所有参与该项目的人员清单,以逗号分隔。如果一个人只有一个上司,在用户表里,新建一个字段,为上司名称。
    如果一个人对应多个上司,新建一张表,存储每个用户的所有上司。建一个视图,(建一个用户函数更方便!),
        查询到的内容为每个用户本人以及其下属的用户ID清单。(这一步并不困难)最后,当:
    select * from 用户函数 where charindex(视图的用户ID字段+',',业务表的权限字段) > 0 
    有记录存在时,表示有权限,否则无权限
      

  2.   

    --假如这是你的用户表:
    create table t_user(userid varchar(10),
                        username varchar(20),
                        parentid int   /*级别*/)  --1级最大,2级较小,类推--插入一些测试用户
    insert into t_user
    select '01',  'A',1 union all
    select '0101','B',2 union all
    select '0102','C',2 union all
    select '0103','D',2 union all
    select '010301','E',3 union all
    select '020101','N',3 union all
    select '02','F',2 union all
    select '0201','G',2 union all
    select '020101','H',2--建一个函数,可以得到某人及其下属的清单。如果要将下属的下属都包括,则应作相应修改
    create function f_userlist(@userid varchar(10)) returns table as
    return(select ',' + userid + ',' as userid from t_user where userid = @userid 
           or parentid > (select parentid from t_user where userid = @userid))--比方说,用这个语句都重到'01'这个用户及其下属的清单
    select * from f_userlist('01')--建一个业务测试表,其中userlist表示参与该项目的所有用户清单
    create table bissiness(id int,userlist varchar(200))
    insert into bissiness values(1,',020101,010301,')
    insert into bissiness values(2,',0103,0201,')
    insert into bissiness values(3,',020101,')
    insert into bissiness values(4,',010301,')
    insert into bissiness values(5,',02,')--用这些语句就只能查询某个用户有权限的记录
    select * from bissiness where exists(select * from f_userlist('01') where charindex(userid,userlist) > 0)
    select * from bissiness where exists(select * from f_userlist('02') where charindex(userid,userlist) > 0)
    select * from bissiness where exists(select * from f_userlist('010301') where charindex(userid,userlist) > 0)
    ......--以上公供参考[~o~]制造