Windows认证和添加授权角色,通过数据库MVC asp.net

本文关键字:数据库 MVC asp net 认证和 添加 授权 角色 Windows | 更新日期: 2023-09-27 18:12:54

我是mvc4 asp .net的新手,对身份验证和授权感到困惑。我们的是一个内部网站,它从windows认证中获取用户名(HttpContext.Current.User.Identity.Name),并检查数据库中是否存在用户名以及用户拥有的角色。我想使用全局[Authorize]属性和角色来访问控制器。有人能告诉我怎么开始吗?

现在,我有一个函数,它传递用户名并从数据库获取用户数据和相关角色,查询数据被添加到模型中。所以,我使用这个函数来访问网站,但我想使用相同的数据来检查所有控制器和视图,而不需要查询db所有的时间。

Windows认证和添加授权角色,通过数据库MVC asp.net

您只需要创建一个自定义角色提供者。为此,您可以创建一个继承自System.Web.Security.RoleProvider并覆盖某些成员的类。下面的代码应该可以帮助您开始。用你的函数实现替换所有的throw new NotImplementedException()内容。例如,IsUserInRole,你可以提供代码来查询你的数据库,看看用户是否在指定的角色。

using System.Web.Security;
namespace MyNamespace
{        
    public class MyRoleProvider : RoleProvider
    {
        public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            throw new NotImplementedException();
        }
        public override string ApplicationName
        {
           get; set;
        }
        public override void CreateRole(string roleName)
        {
            throw new NotImplementedException();
        }
        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            throw new NotImplementedException();
        }
        public override string[] FindUsersInRole(string roleName, string usernameToMatch)
        {
            throw new NotImplementedException();
        }
        public override string[] GetAllRoles()
        {
            throw new NotImplementedException();
        }
        public override string[] GetRolesForUser(string username)
        {
            throw new NotImplementedException();
        }
        public override string[] GetUsersInRole(string roleName)
        {
            throw new NotImplementedException();
        }
        public override bool IsUserInRole(string username, string roleName)
        {
            throw new NotImplementedException();
        }
        public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
        {
            throw new NotImplementedException();
        }
        public override bool RoleExists(string roleName)
        {
            throw new NotImplementedException();
        }
    }
}

您可能不需要实现所有这些。例如,如果您的应用程序不会创建或删除角色,那么就不需要对CreateRoleDeleteRole执行任何操作。

您还需要向ASP注册您的角色提供程序。. NET框架,以便它知道如何使用它。像下面这样更新你的web.config

<configuration>
    <system.web>
        <roleManager defaultProvider="MyRoleProvider" enabled="true">
            <providers>
                <add
                    name="MyRoleProvider"
                    type="MyNamespace.MyRoleProvider"           
                    applicationName="MyApplicationName" />
            </providers>
        </roleManager>
    </system.web>
</configuration>