gpt4 book ai didi

c# - 将 ASP.NET MVC5 身份角色添加到我现有的 Intranet 项目

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:35 24 4
gpt4 key购买 nike

我已经阅读了很多关于在 MVC5 中处理角色管理的身份方式的博客文章,但其中大多数似乎都集成了注册系统等。我想知道我是否可以简单地使用角色。

我有一个现有的 MVC5 项目,我从 Active Directory 中提取我的用户并将它们存储在自定义用户模型类中。是否可以将身份角色管理与这样的项目集成?

我是 ASP.Net MVC 的新手,到目前为止,这让我有些头疼。我是否必须使用扩展 IdentityUser 的模型类?如果是这样,我是否仍然可以使用我的事件目录用户并将 GUID、电子邮件、名称等简单地映射到那个新类,然后使用角色来限制对我的应用程序 View 的访问?

最佳答案

虽然我还没有在生产中使用 ASP.NET Identity(可能在几个月后),但我确实有一个测试项目可以针对内部用户的事件目录进行身份验证。不过,您将不得不推出自己的实现方案才能完成这项工作。

这里有一些简短的示例来展示我如何以不同的方法访问事件目录:

角色

public async Task<IList<string>> GetRolesAsync(User user) {
List<string> roles = new List<string>();

//Active Directory Roles
if (user.Email.Contains("@mycompany")) {
var directory = new CompanyDirectory();

var adGroups = directory.GetGroupsByUser(user.Email);

if (adGroups != null && adGroups.Count > 0) {
roles.AddRange(adGroups);
}
}

//SQL Server Roles
var dbRoles = await _context.Users
.Where(u => u.UserName == user.UserName)
.SelectMany(u => u.Roles)
.Select(r => r.Name)
.ToListAsync();

roles.AddRange(dbRoles);

return roles;
}

授权

public override async Task<User> FindAsync(string userName, string password) {
var identityUser = await base.FindByNameAsync(userName);

if (identityUser != null) {
if (userName.EndsWith("@mycompany.net")) {
var directory = new CompanyDirectory();
var isValidated = directory.ValidateUser(userName, password);

if (isValidated) {
return identityUser;
}
} else {
//SQL Server Auth
}
}

return null;
}

您不需要扩展 IdentityUser 类,因为它实际上是 Entity Framework 实现使用的默认类(即使我使用 SQL Server,我的数据库架构与默认的有很大不同ASP.NET Identity 实现,所以我使用自己的模型)。至少您需要实现的是 IUser(这实际上是 IdentityUser 实现的)。以下是我的实现方式:

public partial class User : IUser<Guid> {

}

我有另一个同名的部分类,它包含 Entity Framework 使用的所有属性和信息。

关于c# - 将 ASP.NET MVC5 身份角色添加到我现有的 Intranet 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22870748/

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