有这么几方法吧
1、你给老师的表添加一个表示权限的字段,比如叫Cla***ight,使用逗号分隔该老师可管理的班,比如"1,2,3",在老师登录或是查询学生信息时,将这个Cla***ight读入变量,比如tCRight 在查询学生的SQL语句指定条件 WHERE [Class] IN (" & tCRight & ") ....
这样就实现你的想法了.


'打开老师表,读取权限
Rs.Open "SELECT * FROM [老师] WHERE ID=" & TeacherID
If Not(Rs.Eof) Then
   tCRright = Rs("Cla***ight")
End If
Rs.Close
If tCRright = "" Then tCRright = "-1"  ' 确保tCRight值有效
'生成学生查询语句
Sql = "SELECT * FROM [学生] WHERE [Cla***ight] IN (" & tCRight & ")"
Rs.Open Sql, Conn, 1,1
 
 
 
2、动态分配用户权限
你可以这样做,直接给你的用户表加一个字段,是专门用来存权限的。
然后该权限 是一个数组就可以了。比如 添加页面 是权限a
那么 就给该用户分配一个 a权限,如果删除权限是b那么该用户就是 a,b的权限,那么该用户就有 添加和删除的权限了!
我只是给你的思路!不知道你明白不明白!检测该用户权限的时候 就检测该用户的权限字段是否有a如果有的话 就有添加的权限!顺便给你一个函数instr这个是检测 a出现的位置的 !!
 
首先是INSTN的这个函数
instr函数  InStr([start, ]string1, string2[, compare]),下标从1开始
  返回指定一字符串在另一字符串中最先出现的位置。在字符串string1中,从start开始找string2,省略start时从string1头开始找。找不到时,函数值为0。

  INSTR(从第几个字符开始,源字符串 ,要查找的字符串, 要找到第几个匹配的序号)

示例  本示例使用 InStr 函数来查找某字符串在另一个字符串中首次出现的位置。
  Dim SearchString, SearchChar, MyPos
  SearchString ="XXpXXpXXPXXP" ' 被搜索的字符串。
  SearchChar = "P" ' 要查找字符串 "P"。
  ' 从第四个字符开始,以文本比较的方式找起。返回值为 6(小写 p)。
  ' 小写 p 和大写 P 在文本比较下是一样的。
  MyPos = Instr(4, SearchString, SearchChar, 1)
  ' 从第一个字符开使,以二进制比较的方式找起。返回值为 9(大写 P)。
  ' 小写 p 和大写 P 在二进制比较下是不一样的。
  MyPos = Instr(1, SearchString, SearchChar, 0)
  ' 缺省的比对方式为二进制比较(最后一个参数可省略)。
  MyPos = Instr(SearchString, SearchChar) ' 返回 9。
  MyPos = Instr(1, SearchString, "W") ' 返回 0。
  如果想在字符串"cvbnm36def36789"找到字符串"36"的第一次出现位置,在asp语句中可以写成:
  <%=InStr("cvbnm36def36789","36")%> 结果等于6