我正在构建我的网站,并且我想限制我的网站的一部分(管理部分)正常公开显示。
- 我正在使用 LINQ 进行数据库访问。
- 我有一个 Service 类来处理通过 LINQ 对数据库的调用
- 我的整个网站都在运行,除了登录部分。
到目前为止我已经only能够找到使用 MembershipProvider 和/或 RoleProviders 等的示例。说实话,对于我想要的东西来说,这似乎需要太多工作。这一切都必须做如果您在输入字段中输入正确的密码,则让您进入。
我真的不能避开提供者吗?
由于您只有一个用户,因此不需要创建数据库依赖项。您可以基于硬编码凭据创建一个非常简单的授权服务。例如,
public class AuthorizationService{
private AuthorizationService(){}
public static readonly AuthorizationService Instance = new AuthorizationService();
private const string HardCodedAdminUsername = "someone";
private const string HardCodedAdminPassword = "secret";
private readonly string AuthorizationKey = "ADMIN_AUTHORIZATION";
public bool Login(string username, string password, HttpSessionStateBase session){
if(username.ToLowerInvariant().Trim()==HardCodedAdminUsername && password.ToLowerInvariant().Trim()==HardCodedAdminPassword){
session[AuthorizationKey] = true;
return true;
}
return false;
}
public void Logout(HttpSessionStateBase session){
session[AuthorizationKey] = false;
}
public bool IsAdmin(HttpSessionStateBase session){
return session[AuthorizationKey] == true;
}
}
然后你就可以构建一个自定义的IAuthorizationFilter
like:
public class SimpleAuthFilterAttribute: FilterAttribute, IAuthorizationFilter{
public void OnAuthorization(AuthorizationContext filterContext){
if(!AuthorizationService.Instance.IsAdmin(filterContext.HttpContext.Session)){
throw new UnauthorizedAccessException();
}
}
}
然后你所要做的就是用以下内容装饰受保护的控制器操作SimpleAuthFilter
并且您的应用程序的登录突然有效。耶! (请注意,我在 StackOverflow 应答窗口中编写了所有这些代码,因此您可能需要在其实际运行之前清除拼写错误等)
Also,如果您发现不必要的话,可以重构它以省略用户名。您需要创建一个控制器操作Login
and Logout
进行相应的调用AuthorizationService
,如果您希望受保护的控制器操作始终可访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)