Cod*_*ior 5 authentication asp.net-mvc filter
我是ASP.net MVC的新手,并使用它创建了我的第一个Web应用程序.在我的应用程序中我使用数据库身份验证 我在控制器中创建了Login操作,检查输入的用户名和密码是否存在于DB中,如果存在,则在Session中输入所需的值,并根据权限将用户重定向到页面,将用户重定向到登录页面.像这样
public ActionResult Login()
{
if(uservalid)
{
//set session values and redirect to dashboard
}
else
{
//redirect to login
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,有一些功能只能在用户登录时访问.我想在用户尝试访问这些功能之前检查用户是否登录,如果他没有登录或没有权限,则重定向到登录页面或显示一些错误消息.
public ActionResult SomeAction()
{
//Available only when user is logged-in
}
Run Code Online (Sandbox Code Playgroud)
那么我该如何检查用户是否登录并提供操作访问权限.我读了有关Authorize属性但不知道如何使用它,因为我正在使用数据库身份验证.
我申请[Authorize]以及我自己的自定义属性来限制基于许可的操作。代码如下
[Authorize]
[FeatureAuthentication(AllowFeature=FeatureConst.ShowDashboard)]
public ActionResult Index()
{
}
Run Code Online (Sandbox Code Playgroud)
过滤器代码
public class FeatureAuthenticationAttribute : FilterAttribute, IAuthorizationFilter
{
public FeatureConst AllowFeature { get; set; }
public void OnAuthorization(AuthorizationContext filterContext)
{
//var featureConst = (FeatureConst)filterContext.RouteData.Values["AllowFeature"];
var filterAttribute = filterContext.ActionDescriptor.GetFilterAttributes(true)
.Where(a => a.GetType() == typeof(FeatureAuthenticationAttribute));
if (filterAttribute != null)
{
foreach (FeatureAuthenticationAttribute attr in filterAttribute)
{
AllowFeature = attr.AllowFeature;
}
User currentLoggedInUser = (User)filterContext.HttpContext.Session["CurrentUser"];
bool allowed = ACLAccessHelper.IsAccessible(AllowFeature.ToString(), currentLoggedInUser);
// do your logic...
if (!allowed)
{
string unAuthorizedUrl = new UrlHelper(filterContext.RequestContext).RouteUrl(new { controller = "home", action = "UnAuthorized" });
filterContext.HttpContext.Response.Redirect(unAuthorizedUrl);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用FormsAuthentication,则不需要使用 ASP.NET 会话来跟踪当前经过身份验证的用户。
我阅读了 Authorize 属性,但不知道如何使用它,因为我正在使用数据库身份验证。
假设您使用 FormsAuthentication,一旦您验证了用户的凭据,您应该设置一个表单身份验证 cookie:
public ActionResult Login()
{
if(uservalid)
{
FormsAuthentication.SetAuthCookie("username", false);
return RedirectToAction("SomeProtectedAction");
}
else
{
//redirect to login
}
}
Run Code Online (Sandbox Code Playgroud)
进而:
[Authorize]
public ActionResult SomeAction()
{
string currentlyLoggedInUser = User.Identity.Name;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果您使用 Visual Studio 中的 Internet 模板创建一个新的 ASP.NET MVC 应用程序,您可以查看 AccountController,它负责对用户进行身份验证并设置表单身份验证 cookie。当然,您可以将所有实体框架的废话都扔掉,并针对您自己的数据库表实施您自己的凭据验证。
| 归档时间: |
|
| 查看次数: |
17510 次 |
| 最近记录: |