我花了一些时间搜索,发现了很多令人困惑的答案,所以我会在这里发布澄清.
我使用MVC4 VS2012创建了使用域身份验证的Intranet站点.一切都奏效但是,为了管理可以访问此webapp的不同区域的用户,我不喜欢使用我无法管理的AD组,也不能使用webapp的用户.
有办法吗我认为这将涉及关联/存储属于自定义角色的域名,并使用Authorize属性来控制访问.
[Authorize(Roles = "Managers")]
任何人都可以提出最好的模式,还是指向正确的方向?
我看到一个类似的解决方案link,但我仍然不知道如何使用这个对存储的角色列表,并验证用户对这些角色.任何人都可以详细说明这个解决方案是否可行?
protected void Application_AuthenticateRequest(object sender,EventArgs args) { if (HttpContext.Current != null) { String[] roles = GetRolesFromSomeDataTable(HttpContext.Current.User.Identity.Name); GenericPrincipal principal = new GenericPrincipal(HttpContext.Current.User.Identity,roles); Thread.CurrentPrincipal = HttpContext.Current.User = principal; } }
解决方法
我正在使用sql Server和MVC3配置.
<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); } //
在我的应用程序中,自定义角色已修复.
原文地址:https://www.jb51.cc/aspnet/250316.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。