我花了一些时间搜索并找到了很多令人困惑的答案,所以我会在这里发帖澄清。
我正在使用MVC4 VS2012使用域身份验证创建了一个Intranet站点。一切……
我正在使用SQL Server和MVC3的此配置。
Web.config文件:
<system.web> <roleManager enabled="true" defaultProvider="SqlRoleManager"> <providers> <clear /> <add name="SqlRoleManager" type="System.Web.Security.SqlRoleProvider" connectionStringName="SqlRoleManagerConnection" applicationName="YourAppName" /> </providers> </roleManager>
....
<authentication mode="Windows" />
<connectionStrings> <add name="SqlRoleManagerConnection" connectionString="Data Source=YourDBServer;Initial Catalog=AppServices;Integrated Security=True;" providerName=".NET Framework Data Provider for OLE DB" /> </connectionStrings>
要实现角色:
的Global.asax.cs
using System.Web.Security; //// protected void Application_Start() { //You could run this code one time and then manage the rest in your application. // For example: // Roles.CreateRole("Administrator"); // Roles.AddUserToRole("YourDomain\\AdminUser", "Administrator"); Roles.CreateRole("CustomRole"); Roles.AddUserToRole("YourDomain\\DomainUser", "CustomRole"); }
在你的控制器中
[Authorize(Roles ="CustomRole")] public class HomeController : Controller {
管理用户
public class Usuario { public string UserName { get; set; } public string RoleName { get; set; } public string Name { get; set; } public const string Domain = "YourDomain\\"; public void Delete() { Roles.RemoveUserFromRole(this.UserName, this.RoleName); } public void Save() { if (Roles.IsUserInRole(Usuario.Domain + this.UserName, this.RoleName) == false) { Roles.AddUserToRole(Usuario.Domain + this.UserName, this.RoleName); } } }
用户类
public class Usuarios : List<Usuario> { public void GetUsuarios() //Get application's users { if (Roles.RoleExists("CustomRole")) { foreach (string _usuario in Roles.GetUsersInRole("CustomRole")) { var usuario = new Usuario(); usuario.UserName = _usuario; usuario.RoleName = "CustomRole"; this.Add(usuario); } } // public void GetUsuariosRed() //Get Network Users (AD) { var domainContext = new PrincipalContext(ContextType.Domain); var groupPrincipal = GroupPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, "Domain Users"); foreach (var item in groupPrincipal.Members) { var usuario = new Usuario(); usuario.UserName = item.SamAccountName; usuario.Name = item.Name; this.Add(usuario); } }
您可以创建这样的“管理”控制器来管理用户:
[Authorize(Roles = "AdminCustomRole")] public class AdminController : Controller { // public ActionResult Index() { var Usuarios = new Usuarios(); Usuarios.GetUsuarios(); return View(Usuarios); } [HttpGet] public ActionResult CreateUser() { var Usuarios = new Usuarios(); Usuarios.GetUsuariosRed(); return View(Usuarios); } //
在我的应用程序中,自定义角色是固定的