主题:  求教[ASP]:后台管理权限分配问题!!!

freelyice

职务:普通成员
等级:1
金币:1.0
发贴:159
#12003/9/16 11:04:49
问题如下:
在添加后台管理员时,我想让一个管理员同时可以管理好几个频道,写入数据库时,admin表中有三个字段:username password power
在power字段中,写入的值如:新闻,二手,房产
那么在新闻管理时该如何判断这管理员有无权限管理该栏目。
我尝试过用split(power,",")
然后for i=0 to ubound(power)
if...............

不成功。。。不知是写错了还是?
非常感谢。。。

编辑历史:[这消息被freelyice编辑过(编辑时间2003-09-16 11:22:19)]


尘埃

职务:普通成员
等级:2
金币:3.0
发贴:700
#22003/9/16 11:10:40
最好用session来做!



freelyice

职务:普通成员
等级:1
金币:1.0
发贴:159
#32003/9/16 11:24:04
session那是肯定的。
登陆时:session("power")=rs("power")
但这里session("power")里的值可能是有好多个字符:如:新闻,二手,房产
那么我们必须把他分割开,
现在主要是不知道在新闻管理页面该如何判断此用户有无权限管理该页面。。。

编辑历史:[这消息被freelyice编辑过(编辑时间2003-09-16 11:25:09)]


freelyice

职务:普通成员
等级:1
金币:1.0
发贴:159
#42003/9/16 12:30:31
感谢您的耐心回复!
那么添加管理员时,权限如何分配给他呢?
在每个频道的管理页面又如何判断他有无权限呢?
level字段如果只是布尔型,还是无法想通,,,



缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#52003/9/16 13:17:40
我最近在做的.

admin_access = Request.Form("chk_news")&"|"&Request.Form("chk_en")&"|"&request.Form("chk_ad")&"|"&Request.Form("chk_buss")&"|"&Request.Form("chk_other")
这个当然和你用,隔开是一个意思

判断:
Sub NeedAccess(Level,Area)
        set rs = Server.CreateObject("ADODB.Recordset")
        sql="SELECT * FROM tb_admin where f_admin = '"& Session("admin") &"'"
        rs.open sql,connCheck,1,1
            
        AdminLevel = rs("f_level")
        
        if Level = "super" and (AdminLevel = "vip" or AdminLevel = "operationer") then
        Call AccessErr()
        elseif Level = "vip" and AdminLevel = "operationer" then
        Call AccessErr()
        end if
        
        
    if AdminLevel <> "super" then    
        if rs("f_access") <> "" then
        admin_access = Split(rs("f_access"),"|")
        else
        Response.Write "权限未知"
        Response.End()
        end if
    rs.close()
    set rs = nothing
        
    Dim checkaccess
    checkaccess=false
    
    for i = 0 to UBound(admin_access)
        if Area = admin_access(i) then
        checkaccess=true
        exit for
        end if
    next
    
    if checkaccess<>true then
    Call AccessErr()
    end if
    end if

End Sub

编辑历史:[这消息被allinhands编辑过(编辑时间2003-09-16 13:18:51)]


缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#62003/9/16 13:20:23
其实想想上面写的太累赘了..可惜懒....这样看起来更容易看明白



freelyice

职务:普通成员
等级:1
金币:1.0
发贴:159
#72003/9/16 14:00:00
感谢大家的帮助,问题得已解决!lemontree的方法,我还得去研究一下。。。allinhands你写得好长呀,看得我头都晕了。:)
底下是“蓝色理想"一位朋友写的:

<%
function isAdmin(adminName,Name)
isAdmin = false
Name = split(Name,"|")
for i = 0 to uBound(Name)
if Name(i) = adminName then
    isAdmin = true    
exit for    
end if
next
end function
Name = "新闻|二手|房产 " '用表的字段内容代替
adminName = "新闻" '当前栏目名称代替
if isAdmin(adminName,name) then
response.write "可以管理"
elseresponse.write "没有权限"
end if%>

编辑历史:[这消息被freelyice编辑过(编辑时间2003-09-16 14:01:50)]
[这消息被freelyice编辑过(编辑时间2003-09-16 14:02:30)]


缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#82003/9/16 14:52:15
我把红色部分标记给你看了,跟你的也就一个意思



freelyice

职务:普通成员
等级:1
金币:1.0
发贴:159
#92003/9/16 16:05:57
en...shi de......Thanks...
It's a good day today!!!
:)



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#102003/9/16 22:22:29
我的做法是创建一个权限映射表。表字段形式如下:

UserID:用户编号
CategoryID:栏目编号
Rights:权限类型

判断有没有权限就在这个表里面检索相应的用户和栏目,权限类型返回该用户对栏目的权限(如只读、读写、拒绝等)。

这种方法的好处是无需要考虑栏目多少,并可随时扩充权限类型,适用于比较复杂的应用。

更深入地,我们可以给栏目增加一个“继承权限”的属性,如果它的权限是从父级栏目继承过来的,判断它的权限就需要上溯到父目录,并且一至上溯到栏目权限没有继承为止,再从权限映射表里面取得最终栏目的权限。