一个大站点,有不同的访问目录。归结下有三大类型访问目录:
前台未登录会员用户目录;前台登录会员操作目录;系统管理员后台操作目录
文件夹假设如下:站点文件夹(website)
下面:UserFolder(前台登录会员才可访问)、ManageFolder(系统管理员后台操作目录)
其他非在上面提到的两个文件夹内,在整个站点(WebSite文件夹根目录下的全部页面)----可被任意匿名用户访问(前台未登录会员用户目录)
注:前台登录会员的登录路径和系统管理员的后台登录路径是不一样的。============================
SQL表形式:前台会员用户表UserTable 、系统后台用户表ManageTable
=============================
WebConfig: 配置
<authentication mode="Forms"/ >
底下限制目录访问不知道怎么配置====================================================
.cs代码:
可以理解基于该原理验证机制。但FormsAuthenticationTicket()类中roles这个用户数据,跟WebConfig的Role节有关。我不知道要填写什么,另外我想可由系统后台来配置哪些目录可被不同类型的用户来访问,哪些是不允许访问。我要怎么来设立roles这个具体值。
前台未登录会员用户目录;前台登录会员操作目录;系统管理员后台操作目录
文件夹假设如下:站点文件夹(website)
下面:UserFolder(前台登录会员才可访问)、ManageFolder(系统管理员后台操作目录)
其他非在上面提到的两个文件夹内,在整个站点(WebSite文件夹根目录下的全部页面)----可被任意匿名用户访问(前台未登录会员用户目录)
注:前台登录会员的登录路径和系统管理员的后台登录路径是不一样的。============================
SQL表形式:前台会员用户表UserTable 、系统后台用户表ManageTable
=============================
WebConfig: 配置
<authentication mode="Forms"/ >
底下限制目录访问不知道怎么配置====================================================
.cs代码:
可以理解基于该原理验证机制。但FormsAuthenticationTicket()类中roles这个用户数据,跟WebConfig的Role节有关。我不知道要填写什么,另外我想可由系统后台来配置哪些目录可被不同类型的用户来访问,哪些是不允许访问。我要怎么来设立roles这个具体值。
以下是一个例子
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
表示禁止匿名用户访问如果你用Visual Studio2005的话 选网站菜单 点下面的asp.net配置 可以自动打开一个页面 进行相应内容的配置 不必写xml文件那么麻烦
大哥,你的方法太原始了吧
要是文件夹非常多,不是要写Web.config那么多个。另外以后要维护不是要疯掉
我倒发现个web.config统一管理的
<location path ="">......
分享下。不过也谢谢楼上那位意见。呵呵,期待更好的
http://msdn2.microsoft.com/zh-cn/library/b6x6shw7(VS.80).aspx
另,使用角色认证,SQL中无需自己手动建表,推荐一个网页:
http://aspnet.4guysfromrolla.com/articles/040506-1.aspx使用工具完成数据库的设置之后,你就可以定义任意多的角色,什么样的角色可以干什么,你自己在web.config中定义就行了。.net的membership不能满足需要,你可以在其基础上进行修改。还有基于角色的访问控制中角色代表的是权限的集合,当然用户组也是基于角色的访问控制模型的一种简化实现方式。但.net的membership却是地道的基于角色的访问控制哦。
然后通过Users Membership Roles这三个类来取登录者的用户信息 所属的权限组等信息
其实上面你提到说每个目录下建立web.config也是没什么错的。不过我是觉得统一放置在一个配置文件下,相对比较好统一管理,呵呵,可能各有各不同的观点吧。不过无论怎么样都谢谢你关注我的问题。
==================================
public static void UserLogin(string strUserName, string strRoles, bool isPersistent)
{
DateTime objTime = isPersistent ? DateTime.Now.AddMinutes(99999) : DateTime.Now.AddMinutes(60); //永久过期和60分钟过期形式
FormsAuthenticationTicket objticket = new FormsAuthenticationTicket(
1, // 票据版本号
strUserName, // 票据持有者
DateTime.Now, //分配票据的时间
objTime, // 失效时间
isPersistent, // 需要用户的 cookie
strRoles, // 用户数据,这里其实就是用户的角色
FormsAuthentication.FormsCookiePath);//cookie有效路径 //使用机器码machine key加密cookie,为了安全传送
string strHash = FormsAuthentication.Encrypt(objticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strHash); //加密之后的cookie //将cookie的失效时间设置为和票据tikets的失效时间一致
if (objticket.IsPersistent)
{
cookie.Expires = objticket.Expiration;
} //添加cookie到页面请求响应中
HttpContext.Current.Response.Cookies.Add(cookie);
}我传递进来的参数分别是 tiancaolin,cnsawAdmin,false
=====================
<authentication mode="Forms" >
<forms loginUrl="aspblog/index.aspx" name=".ASPXAUTH " timeout="30" path= "/" ></forms>
</authentication>
........................ <location path="aspblog">
<system.web>
<authorization>
<allow roles="cnsawAdmin"/>
<deny roles="cnsawUser,cnsawUnUser"/>
<deny users="*"/>
</authorization>
</system.web>
</location> ==========================================
Global.asax文件代码
protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
HttpApplication App = (HttpApplication)sender;
HttpContext Ctx = App.Context; //获取本次Http请求相关的HttpContext对象
if (Ctx.Request.IsAuthenticated) //验证过的用户才进行role的处理
{
FormsIdentity Id = Ctx.User.Identity as FormsIdentity;
FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票
string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组
Ctx.User = new System.Security.Principal.GenericPrincipal(Id, Roles); }
}
====================================症状是还是无法通过角色cnsawAdmin来访问aspblog 文件夹。不知道哪错了。超级郁闷
{
HttpApplication App = (HttpApplication)sender;
HttpContext Ctx = App.Context; //获取本次Http请求相关的HttpContext对象
if (Ctx.Request.IsAuthenticated) //验证过的用户才进行role的处理
{
FormsIdentity Id = Ctx.User.Identity as FormsIdentity;
FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票
string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组
Ctx.User = new System.Security.Principal.GenericPrincipal(Id, Roles); }
}
======>
FormsAuthenticationTicket票据信息要自己写代码从回传的Cookie中解密出来的(FormsAuthentication.Decrypt)
我的错误根源在于配置文件中那个NAME属性含有空格。结果验证不过去。谢谢各位。
不过确实很感谢你那个要解密的说法帮了我很大忙。
前一个帖子我弄了20分,为了不大想浪费分数。如果你有看到的化。请到
http://topic.csdn.net/u/20080425/15/71baf0fe-0d3b-42d2-89ee-5592749fa13c.html
任意留言。在帖子到期前,如果你有回的化。20分都给你,分不多。特别对星用户来说更是不怎么现眼。
不过还是算表示我的一点感觉心意吧。