首先说明一下这个权限修改是指让后台具有文章管理权限的普通角色只能管理自己创建的文章,管理员可以管理所有人的文章。本文只是起到一个抛砖引玉的作用。
1.打开/admin/article/index.asp,搜索king_edt函数,找到其中的
sql="arttitle,artcontent,artfrom,artauthor,artup,artshow,artcommend,arthead,artgrade,artkeywords,artdescription,artpath,artimg,listids,artdate"
这一段,在末尾加入
,authorid表示作者的id。
2.再找到同函数中的
'Insert Update if len(artid)>0 then conn.execute "update kingart set arttitle='"&safe(data(0,0))&"',artcontent='"&safe(data(1,0))&"',artfrom='"&safe(data(2,0))&"',artauthor='"&safe(data(3,0))&"',artup="&safe(data(4,0))&",artshow="&safe(data(5,0))&",artcommend="&safe(data(6,0))&",arthead="&safe(data(7,0))&",artgrade="&safe(data(8,0))&",artpath='"&safe(data(11,0))&"',artdate='"&safe(data(14,0))&"',artimg='"&safe(data(12,0))&"',listids='"&safe(data(13,0))&"',listid="&listid&",artdescription='"&safe(artdescription)&"',artkeywords='"&safe(artkeywords)&"' where artid="&artid&";" else conn.execute "insert into kingart ("&sql&",artorder,listid) values ('"&safe(data(0,0))&"','"&safe(data(1,0))&"','"&safe(data(2,0))&"','"&safe(data(3,0))&"',"&safe(data(4,0))&","&safe(data(5,0))&","&safe(data(6,0))&","&safe(data(7,0))&","&safe(data(8,0))&",'"&safe(artkeywords)&"','"&safe(artdescription)&"','"&safe(data(11,0))&"','"&safe(data(12,0))&"','"&safe(data(13,0))&"','"&safe(data(14,0))&"','"&king.id&"',"&king.neworder("kingart","artorder")&","&listid&")" artid=king.newid("kingart","artid") art.createmap end if
为了不使文章的所有者因修改文章而改变,我们只在创建文章时写入作者id。你只需将上面代码中的else部分覆盖就可以了。不同之处就在最后那个king.id上,它表示当前登录的用户id。
3.为了让用户只能看到自己的文章我们还要修改sub king_art()函数,这个也在index.asp中。找到
sql="select "&sql&" from kingart where listid="&listid&" order by artorder desc,artid desc;"
后将其替换为if king.level="admin" then sql="select "&sql&" from kingart where listid="&listid&" order by artorder desc,artid desc;" else sql="select "&sql&" from kingart where listid="&listid&" and authorid=" &king.id& " order by artorder desc,artid desc;" end if
相信不少人看到这里已经明白了,我再多句嘴,这个king.level是当前用户权限。admin是系统管理员的权限名,剩下的就是sql的问题了,大家可以根据自己的需要随便改查询语句就ok了。
自己建几个账号试试,是不是普通账号只能看见自己的文章而管理员能看见所有人的呢?这只是个简单的修改,还是有漏洞的,要想防止被他人修改还可以加入判断当前用户id是否等于文章作者id,否则不能修改。
还是找到king_edt函数,搜索
if len(form("artid"))>0 then'若表单有值的情况下
在其后追加set rs=conn.execute("select authorid from kingart where artid="&artid&";") if rs("authorid")<>king.id then king.error king.lang("error/invalid") rs.close set rs=nothing
以上。