Autenticación de Windows y agregue Roles de Autorización a través de la base de datos – MVC asp.net

Soy nuevo en mvc4 asp .net y confundido con la autenticación y autorización. Nuestro es un sitio web interno que toma el nombre de usuario (HttpContext.Current.User.Identity.Name) de la autenticación de Windows y compara con la base de datos si el nombre de usuario existe y qué funciones tiene el usuario. Deseo utilizar el atributo y los roles [Autorizar] globales para dar acceso a los controladores. ¿Alguien puede ayudarme sobre cómo empezar?

Por ahora, tengo una función que transfiere el nombre de usuario y obtiene los datos del usuario y las funciones relacionadas de la base de datos, los datos de la consulta se agregan al modelo. Por lo tanto, estoy usando esta función para dar acceso al sitio web pero quiero usar el mismo datos para verificar contra todos los controladores y vistas sin consultar contra db todo el tiempo.

Solo necesita crear un proveedor de roles personalizado . Para ello, crea una clase que hereda de System.Web.Security.RoleProvider y reemplaza a ciertos miembros. El siguiente código debería ayudarte a comenzar. Reemplace todo el throw new NotImplementedException() cosas con su implementación de la función. Por ejemplo, IsUserInRole proporcionaría un código que consultaría su base de datos para ver si el usuario tiene el rol especificado.

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

Es posible que no necesite implementarlo todo. Por ejemplo, si su aplicación no creará o eliminará Roles, entonces no es necesario hacer nada con CreateRole o DeleteRole .

También debe registrar su proveedor de rol con el marco ASP.NET para que sepa cómo utilizarlo. Actualice su web.config como a continuación.