C# 将ASP.NET MVC5身份角色添加到现有intranet项目中

C# 将ASP.NET MVC5身份角色添加到现有intranet项目中,c#,asp.net-mvc-5,asp.net-identity,asp.net-roles,C#,Asp.net Mvc 5,Asp.net Identity,Asp.net Roles,我已经阅读了很多关于MVC5中处理角色管理的身份方法的博客文章,但其中大多数似乎都集成了注册系统等。我想知道我是否可以简单地使用角色 我有一个现有的MVC5项目,我从Active Directory中提取用户,并将其存储在自定义用户模型类中。是否有可能将身份角色管理与此类项目集成 我是ASP.NETMVC的新手,到目前为止,这让我有些头疼。我必须使用扩展IdentityUser的模型类吗?如果是这样,我是否仍然可以使用active directory用户,只需将GUID、电子邮件、名称等映射到该

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

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


我是ASP.NETMVC的新手,到目前为止,这让我有些头疼。我必须使用扩展IdentityUser的模型类吗?如果是这样,我是否仍然可以使用active directory用户,只需将GUID、电子邮件、名称等映射到该新类,然后使用角色来限制对我的应用程序视图的访问?

而我尚未在生产中使用ASP.NET标识(可能在几个月后)我确实有一个测试项目,可以针对内部用户对active directory进行身份验证。不过,您必须推出自己的实现来实现这一点

以下是一些简短的示例,展示了我是如何用不同的方法访问active directory的:

角色

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;
}

我有另一个同名的分部类,它包含实体框架使用的所有属性和信息

谢谢你的回答。但我不确定我是否完全理解。我的用户已经存储在我的数据库中(它们最初来自Active directory),但它们被复制到我的用户模型中。我想创建自己的角色(它们在AD中没有定义)。我创建了一个角色模型,包括管理员、开发人员和普通用户。您在上面粘贴的代码是否适用于这种情况?再次感谢您的帮助。当然,我要说的是,底层数据存储可以是您喜欢的任何东西。您只需要实现接口来查找正确的数据。
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;
}
public partial class User : IUser<Guid> {

}