请问做一个资料信息管理系统,单位如下:总公司
    销售部
        销售一处
        销售二处
        销售三处
    技术部
        技术一部
        技术二部
        技术三部
    行政部
        企化部
        广告部客户的要求是总公司的用户可以看所有的资料(本身及其下属,包括admin超级管理员对信息系统的初始资料),上级可以看下级的资料(包括本身)。请问一下应该怎么样对这个权限进行控制?谢谢,在线等。

解决方案 »

  1.   

    可以用.net自带的角色控制
    如超级管理员,普通管理员(还可以继续按等级分下去)等等)
    在Global.asax.cs中
    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
    if(User!=null)
    {
    if(User.Identity.AuthenticationType=="Forms")
    {
    string[] roles=new string[4];
    Login lg=new Login();
    bool IsAdmin=false;
    if(Web.Login.isAdmin)
    IsAdmin=true;
    roles[0]=lg.CheckRole(User.Identity.Name,IsAdmin).ToString();//获取用户角色,具体的角色名称如"HighAdmin","NormalAdmin"
    HttpContext.Current.User=new System.Security.Principal.GenericPrincipal(User.Identity,roles);//指定用户的角色

    }
    }
    }======以下针对不同文件访问权限
    web.config中
    <location path="AdminManage1"><!--高级管理员文件夹路径,只允许高级管理员访问-->
       <system.web>
          <authorization>
      <deny  users="?"/>
      <deny roles="HighAdmin"/>
      <allow roles="NormalAdmin"/>
          </authorization>
       </system.web>
     </location>
     <location path="AdminManage2"><!--普通管理员文件夹路径,只允许普通管理员访问-->
       <system.web>
          <authorization>
      <deny  users="?"/>
      <deny roles="NormalAdmin"/>
      <allow roles="HighAdmin"/>
          </authorization>
       </system.web>
     </location>
    ==================如果在同一个文件===
    可以先判断用户属于哪个角色,然后动态决定显示哪些内容

    bool role1=User.IsInRole("HighAdmin");//是否是超级管理员
      

  2.   

    看下
    http://communityserver.org/Default.aspx
    这个论坛的权限设计,不错
      

  3.   

    这已经不是基于角色的权限,而是基于目录(Directory)的权限了,与ActiveDirectory类似。
      

  4.   

    sekone() ( ) 
    --------------
    您发的这个好是好,但是我做的是基于角色的权限控制,可能和这个不太符合.我现在头疼的是单位的编码总是会重复比如说总公司的编码是B,其下属的编码分别是B1、B2、B3、。B11、B12。。当出现到编码B11时,问题出现了。因为B1下属的第一位编码也是B11,这样就会出现主键重复的问题,不知道该怎样解决,如果把这个问题解决掉,我应该可以把权限控制做好的。
      

  5.   

    用基于角色授权肯定无法解决,办法是在角色上加目录,即Admin@总公司/销售部,并令只要具备这个角色,即等同于具备了Admin@总公司/销售部/销售一处的角色。当然如果上级管理员并不具备下级管理员的所有权限的话就比较麻烦了。那么就只能把Admin@总公司/销售部改为DirectoryAdmin@总公司/销售部,然后下级对Admin@总公司/销售部/销售一处和DirectoryAdmin@总公司/销售部/销售一处设置不同的权限就OK了。
      

  6.   

    总公司 code:B
        销售部 code:B1
            销售一处 code:B11
            销售二处 code:B12
            销售三处 code:B13
        技术部 code:B2
        .......
        .......    行政部code:B9
        企化部code:B10
        广告部code:B11
    销售一处和广告部的code就重复了,怎么办才好呢
      

  7.   

    Ivony() 
    --------你说的也有道理,但是如果我把编码问题处理好了的话,也应该可以实现相应权限控制。
        我是先把角色定义好for example:   规章制度(菜单): 查看、新增、修改、删除
                   档案存放(菜单): 查看、新增、修改、删除定义“总公司”角色,同时具有这两个菜单的查看功能。
    然后根据编码查询  所有 deptid like 'B%'的资料。我就是这样设计的,可能还有哪地方不合适,目前就头疼编码这块不知道怎么实现比较好
      

  8.   

    主要是你不把体系变成Directory的,明天老板需求变了那就会疯掉了。
      

  9.   

    conn.Open();
    string sSQL = "select max( cast( substring( deptid,len(parentid) + 1, len( deptid ) - len(parentid) ) as int )) + 1      as co  from deptinfo    where  parentid= '"+this.lbID.Text.Replace("'", "''").Trim()+"'";
    SqlCommand myconn=new SqlCommand(sSQL,conn);
    SqlDataReader dr = myconn.ExecuteReader(); 
    if(dr.Read()) 
    {
      if(dr["co"].ToString() != "" )
      { 
        id =this.lbID.Text.Replace("'", "''").Trim() + dr["co"].ToString();
      } 
      else 
       { 
        id =this.lbID.Text.Replace("'", "''").Trim() +"001"; 
       } 
      
    else
      {
        id=this.lbID.Text.Replace("'", "''").Trim() +"001"; 
    }执行过后,还是无法实现B001、B002、B003等的效果,而是得到了B1、B2、B3的结果,请问应该怎样转换才合适呢
      

  10.   

    没有人知道吗?应该怎么转换才会出现B001、B002、B003而不是B1、B2、B3,真的好着急哦