我正在使用自己的数据库并进行身份验证。
数据库包含一个包含用户的表,第二个包含用户所分配的角色。
问题是:如何在web.config中准备该部分,以便它只允许属于其中一个角色的用户访问该文件夹?
第二个问题: 使用IIS配置我可以阻止直接访问web目录中的所有文件夹。让我们说,其中一个页面将包含允许从这些受保护文件夹下载文件的链接。如果允许用户访问该站点,他还能够下载该内容吗?
答案 0 :(得分:1)
下面是一个示例web.config,如果您将此文件放在一个文件夹中(在您的Web项目结构中),您只希望允许具有“Admin”角色的用户(例如),这将完成工作。
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
为了将此链接与您的安全性相关联,在成功登录检查后,您需要创建FormsAuthenticationTicket并传递用户名和用户角色等详细信息。
显示这一点的一个简单示例是:
FormsAuthenticationTicket myTicket = new FormsAuthenticationTicket(1, myUserName, DateTime.Now, DateTime.Now.AddMinutes(30), true, myUserRole, FormsAuthentication.FormsCookiePath);
string hash = FormsAuthentication.Encrypt(myTicket);
HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
Response.Cookies.Add(myCookie);
这样你就可以在你的代码中执行此操作:
if (Context.User.IsInRole("Admin")) {
// Do Something
} else {
// Do Something Else
}
您的Web.config文件将如上所述。
有关FormsAuthenticationTickets http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx
的更多信息答案 1 :(得分:0)
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>