gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 表单例份验证 + 授权属性 + 简单角色

转载 作者:行者123 更新时间:2023-12-03 05:53:23 24 4
gpt4 key购买 nike

我正在尝试向 ASP.NET MVC 应用程序添加简单身份验证和授权。

我只是想在基本表单例份验证中添加一些附加功能(由于简单性和自定义数据库结构)

假设这是我的数据库结构:用户: 用户名 密码 角色(最好是一些枚举。如果需要的话可以是字符串。目前,用户只有一个角色,但这可能会改变)

高级问题:鉴于上述数据库结构,我希望能够执行以下操作:

  • 使用表单例份验证进行简单登录
  • 用以下内容装饰我的行为:[授权(角色={ MyRoles.Admin, MyRoles.Member})]
  • 在我的 View 中使用角色(以确定在某些部分中显示的链接)

目前,我真正确定的是如何进行身份验证。之后我就迷路了。我不确定在哪一点获取用户角色(登录、每次授权?)。由于我的角色可能不是字符串,因此我不确定它们如何与 User.IsInRole() 相适应。

现在,我在这里问是因为我还没有找到一个“简单”的方法来完成我的需要。我见过很多例子。

对于身份验证:

  • 我们有简单的用户验证来检查数据库和“SetAuthCookie”
  • 或者我们重写成员(member)资格提供程序并在 ValidateUser 内部执行此操作在这两种情况下,我不确定如何添加我的简单用户角色,以便它们可以使用:HttpContext.Current.User.IsInRole("管理员")此外,我不确定如何修改它以与我的枚举值一起使用。

对于授权,我见过:

  • 派生 AuthorizeAttribute 并实现 AuthorizeCore 或 OnAuthorization 来处理角色?
  • 实现 IPrincipal?

任何帮助将不胜感激。不过,我担心我可能需要很多细节,因为我在 Google 上搜索到的内容似乎都不符合我需要做的事情。

最佳答案

我想我已经实现了类似的东西。
我的解决方案,基于NerdDinner tutorial ,如下。

当您登录用户时,添加如下代码:

var authTicket = new FormsAuthenticationTicket(
1, // version
userName, // user name
DateTime.Now, // created
DateTime.Now.AddMinutes(20), // expires
rememberMe, // persistent?
"Moderator;Admin" // can be used to store roles
);

string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
System.Web.HttpContext.Current.Response.Cookies.Add(authCookie);

将以下代码添加到Global.asax.cs:

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null || authCookie.Value == "")
return;

FormsAuthenticationTicket authTicket;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch
{
return;
}

// retrieve roles from UserData
string[] roles = authTicket.UserData.Split(';');

if (Context.User != null)
Context.User = new GenericPrincipal(Context.User.Identity, roles);
}

完成此操作后,您可以使用 [Authorize] Controller 操作代码中的属性:

[Authorize(Roles="Admin")]
public ActionResult AdminIndex ()

如果您还有其他问题,请告诉我。

关于asp.net-mvc - ASP.NET MVC 表单例份验证 + 授权属性 + 简单角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1385042/

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