asp.net-mvc-4 – 具有自定义角色的MVC 4 Intranet身份验证

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-4 – 具有自定义角色的MVC 4 Intranet身份验证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我花了一些时间搜索,发现了很多令人困惑的答案,所以我会在这里发布澄清.

我使用MVC4 VS2012创建了使用域身份验证的Intranet站点.一切都奏效但是,为了管理可以访问此webapp的不同区域的用户,我不喜欢使用我无法管理的AD组,也不能使用webapp的用户.

有办法吗我认为这将涉及关联/存储属于自定义角色的域名,并使用Authorize属性来控制访问.

  1. [Authorize(Roles = "Managers")]

任何人都可以提出最好的模式,还是指向正确的方向?

我看到一个类似的解决方link,但我仍然不知道如何使用这个对存储的角色列表,并验证用户对这些角色.任何人都可以详细说明这个解决方案是否可行?

  1. protected void Application_AuthenticateRequest(object sender,EventArgs args)
  2. {
  3. if (HttpContext.Current != null)
  4. {
  5. String[] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name);
  6.  
  7. GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity,roles);
  8.  
  9. Thread.CurrentPrincipal = HttpContext.Current.User = principal;
  10. }
  11. }

解决方法

我正在使用sql Server和MVC3配置.

Web.config文件

  1. <system.web>
  2. <roleManager enabled="true" defaultProvider="sqlRoleManager">
  3. <providers>
  4. <clear />
  5. <add name="sqlRoleManager" type="System.Web.Security.sqlRoleProvider" connectionStringName="sqlRoleManagerConnection" applicationName="YourAppName" />
  6. </providers>
  7. </roleManager>

….

  1. <authentication mode="Windows" />

….

  1. <connectionStrings>
  2.  
  3. <add name="sqlRoleManagerConnection" connectionString="Data Source=YourDBServer;Initial Catalog=AppServices;Integrated Security=True;" providerName=".NET Framework Data Provider for OLE DB" />
  4. </connectionStrings>

表达角色:

的Global.asax.cs

  1. using System.Web.Security;
  2.  
  3. ////
  4. protected void Application_Start()
  5. {
  6.  
  7. //You could run this code one time and then manage the rest in your application.
  8. // For example:
  9.  
  10. // Roles.CreateRole("Administrator");
  11. // Roles.AddUserToRole("YourDomain\\AdminUser","Administrator");
  12.  
  13.  
  14. Roles.CreateRole("CustomRole");
  15.  
  16. Roles.AddUserToRole("YourDomain\\DomainUser","CustomRole");
  17.  
  18. }

在你的控制器

  1. [Authorize(Roles ="CustomRole")]
  2. public class HomeController : Controller
  3. {

管理用户

  1. public class Usuario
  2. {
  3. public string UserName { get; set; }
  4. public string RoleName { get; set; }
  5. public string Name { get; set; }
  6. public const string Domain = "YourDomain\\";
  7.  
  8.  
  9. public void Delete()
  10. {
  11. Roles.RemoveUserFromRole(this.UserName,this.RoleName);
  12. }
  13.  
  14. public void Save()
  15. {
  16. if (Roles.IsUserInRole(Usuario.Domain + this.UserName,this.RoleName) == false)
  17. {
  18. Roles.AddUserToRole(Usuario.Domain + this.UserName,this.RoleName);
  19. }
  20. }
  21. }

用户

  1. public class Usuarios : List<Usuario>
  2. {
  3.  
  4. public void GetUsuarios() //Get application's users
  5. {
  6.  
  7. if (Roles.RoleExists("CustomRole"))
  8. {
  9. foreach (string _usuario in Roles.GetUsersInRole("CustomRole"))
  10. {
  11. var usuario = new Usuario();
  12. usuario.UserName = _usuario;
  13. usuario.RoleName = "CustomRole";
  14. this.Add(usuario);
  15. }
  16. }
  17. //
  18.  
  19. public void GetUsuariosRed() //Get Network Users (AD)
  20. {
  21. var domainContext = new PrincipalContext(ContextType.Domain);
  22. var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext,IdentityType.SamAccountName,"Domain Users");
  23.  
  24. foreach (var item in groupPrincipal.Members)
  25. {
  26. var usuario = new Usuario();
  27. usuario.UserName = item.SamAccountName;
  28. usuario.Name = item.Name;
  29. this.Add(usuario);
  30. }
  31.  
  32. }

您可以创建一个“Admin”控制器来管理用户

  1. [Authorize(Roles = "AdminCustomRole")]
  2. public class AdminController : Controller
  3. {
  4.  
  5. //
  6.  
  7. public ActionResult Index()
  8. {
  9.  
  10. var Usuarios = new Usuarios();
  11. Usuarios.GetUsuarios();
  12. return View(Usuarios);
  13.  
  14. }
  15.  
  16. [HttpGet]
  17. public ActionResult CreateUser()
  18. {
  19.  
  20. var Usuarios = new Usuarios();
  21. Usuarios.GetUsuariosRed();
  22.  
  23. return View(Usuarios);
  24.  
  25. }
  26.  
  27. //

在我的应用程序中,自定义角色已修复.

猜你在找的asp.Net相关文章