gpt4 book ai didi

asp.net-mvc - 如何限制对 ASP.net MVC Controller 中某些操作的访问

转载 作者:行者123 更新时间:2023-12-04 17:00:58 25 4
gpt4 key购买 nike

我是 ASP.net MVC 的新手,并使用它创建了我的第一个 Web 应用程序。在我的应用程序中,我使用数据库身份验证。我在 Controller 中创建了登录操作,它检查输入的用户名和密码是否存在于数据库中,如果存在,则将所需的值放入 Session 并根据他的权限将用户重定向到页面,否则将用户重定向到登录页面。像这样

public ActionResult Login()
{
if(uservalid)
{
//set session values and redirect to dashboard
}
else
{
//redirect to login
}
}

在我的应用程序中有一些功能只能在用户登录时访问。我想在用户尝试访问这些功能之前检查用户是否已登录,如果他未登录或没有权限,则重定向到登录页面或显示一些错误消息。
public ActionResult SomeAction()
{
//Available only when user is logged-in
}

那么如何检查用户是否登录并授予操作权限。我阅读了 Authorize 属性,但不知道如何使用它,因为我正在使用数据库身份验证。

最佳答案

我申请 [Authorize]以及我自己的自定义属性,用于根据许可限制操作。代码如下

 [Authorize]
[FeatureAuthentication(AllowFeature=FeatureConst.ShowDashboard)]
public ActionResult Index()
{

}

过滤器代码
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);
}
}
}
}

关于asp.net-mvc - 如何限制对 ASP.net MVC Controller 中某些操作的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20123589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com