繁体   English   中英

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

[英]Adding ASP.NET MVC5 Identity Roles to my existing intranet project

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

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

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

虽然我还没有在生产中使用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> {

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM