注册 登录
编程论坛 ASP.NET技术论坛

[求助]如何实现没有登陆就没有访问权限

sldtk1 发布于 2007-05-01 22:19, 1576 次点击
一个BBS,如果是没有登陆的访客只能浏览帖子而不能发帖和回复,请问如何实现这个功能?
4 回复
#2
beniao2007-05-14 21:31
在页面运行的时候就判断看用户是否登陆.如果登陆就显示回复页面,没登陆就不显示恢复的页面
if(Session["username"]==null)
{
.......
}
else
{
........
}
#3
川流不息2007-05-14 22:04
同上,我認為可以在你進頁面時,首先判斷用戶是否登錄,如果沒有,建議放一個隱藏框或在JS裡面定義一個全局變量,可以設一個值,即登錄可設為1,不登錄可設為0,看個人喜好。然後在要回復時,你在JS裡面判斷值是哪一個,如果為0,則直接彈出對話框,提示他登錄後才可回復貼子。

[此贴子已经被作者于2007-5-14 22:05:18编辑过]


#4
铲铲2007-05-15 02:54
建议你去了解一下.NET的验证授权机制。
上述帖子均没有说明实际问题。

这还得从验证授权机制说起。可以把网站的访问者分为通过验证操作(也就是输入用户名密码登陆),和对某种资源的请求,请求的时候就发生“授权”操作,这时系统根据用户验证的结果,决定是否允许用户访问。

你上面说描述的匿名,实际也算访问者中的一大类,也就是没有经过验证的,都可以当做匿名用户来看待。

如果你看网站的web.config配置文件,会发现authentication配置节和authorization配置节。前者配置告诉系统你将采取什么样的验证方式,有NONE,Windows,Forms和Passport四种,我们暂且不讨论它。现在着重看authorization配置节,典型的写法如下:
<authorization>
<deny users="?"/>
</authorization>

这里既是告诉系统,这个配置文件所在的目录和它的所有子目录拒绝匿名用户的访问。“?”表示所有匿名用户。除此之外还有*号表示所有用户。关键词有deny和allow。

说道这里,你应该知道一种办法:那就是把执行编辑、插入等操作的aspx页面文件放在一个目录中,对这个目录放置一个带有如上内容的web.config文件。这样如果要访问这个目录中的页面,没有登陆验证的情况下会自己跳转到login.aspx页面(为什么会跳转到这个页面,那是machine.config配置中规定的。你可以在网站根目录的web.config中的authentication配置节中更改这一设置。
这样你的页面不用写一句代码就可以实现拒绝匿名用户访问的效果。

如果你嫌这个不够灵活的话,Page对象中自带一个User对象,User对象的Identity属性的IsAuthenticated属性可以用来检测用户是否通过登陆。Request对象本身的IsAuthenticated也可以拿来检测。这些属性就可以在编程时候使用,更精细化地决定不同用户有什么不同的操作。

如果你还想了解更多关于验证授权的知识,可以看看这片文章:https://bbs.bc-cn.net/viewthread.php?tid=67635&star=at#

.NET自身提供的这种验证授权机制,实际底层原理还是借助Cookies,只不过它把他们进行了一些封装,专门定制了一些功能,自己不用繁复地写头疼地代码来验证用户,像以前那样容易出错,最恼火的是很容易泄露权限。
#5
tel19822007-05-15 07:22
同意铲铲的建议!
1