我有一个固定资产表product,字段分别为ID、Name(资产名称)、Class(资产类别)、Type(规格型号)、Depart(部门)、Date(使用日期)、Beiz(备注)
类别表Class,字段分别为ID、ClassId(类别序号)、ClassName(类别名称)、ClassPre(上一个序号)、ClassTj(序号深度)、ClassOrder(顺序)
问题:现在我想控制每个操作员的权限,管理员可以访问所有类别下的资产,而一般人员则只能访问某个类别或某几个类别下的资产,由管理员授权。请问控制权限的这段代码如何写?   
获取所有资产类别下的代码为:  
            string strSql = "Select A.*,C.ClassName  From Product A, Class C Where A. Class=C.Id ";             GridView1.DataKeyNames = new string[] { "ID" };
                           
             sqloperate.gvDataBind(GridView1, strSql);获取其他类别下的资产信息代码该如何写?难道要一个个判断class类别? string strSql = "Select A.*,C.ClassName  From Product A, Class C Where A. Class=C.Id and A.class=?";请问这句代码该如何改?请大家帮帮我吧,这个问题,我想了好久了,没有头绪。谢谢了!!

解决方案 »

  1.   

    首先,我想你一定是有一个user表吧
    那么,新建一个表assignment(id, user, class),表示user拥有对class的访问权限管理员授权某个用户可以访问某个类别,就是加一条记录查询的时候可以
    Select A.*,C.ClassName
    From Product A, Class C, assignment T
    where A. Class=C.Id and c.id in (Select class from assignment where assignment.it=:id)
      

  2.   

    最后的where写错了,应该是assignment.user=:user
    接收一个参数:user
      

  3.   

    请教 saintbinary 你说的 新建一个表assignment(id, user, class),表示user拥有对class的访问权限.
    还是不太清楚 where assignment.user=:user 这句? :user 这个是什么意思啊?用户登陆时,要用session存放哪些记录? 
      

  4.   

    还是从逻辑上说吧。
    首先,你肯定要在某个地方保存当前登录用户的id
    然后,当用户对资产进行查询的时,从assignment里面可以查到当前用户有权访问的类别……
    那就是说你的查询需要一个参数来表明当前用户,即where assignment.user=:user
    :user表示当前用户,是一个参数占位符。