asp.net-mvc-4 – 具有自定义角色的MVC 4 Intranet身份验证
发布时间:2020-05-24 02:44:52 所属栏目:asp.Net 来源:互联网
导读:我花了一些时间搜索,发现了很多令人困惑的答案,所以我会在这里发布澄清. 我使用MVC4 VS2012创建了使用域身份验证的Intranet站点.一切都奏效但是,为了管理可以访问此webapp的不同区域的用户,我不喜欢使用我无法管理的AD组,也不能使用webapp的用户. 有办法吗我
|
我花了一些时间搜索,发现了很多令人困惑的答案,所以我会在这里发布澄清. 我使用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配置.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("YourDomainAdminUser","Administrator");
Roles.CreateRole("CustomRole");
Roles.AddUserToRole("YourDomainDomainUser","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);
}
}
您可以创建一个“Admin”控制器来管理用户: [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);
}
//
在我的应用程序中,自定义角色已修复. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET ReportViewer Google Chrome CPU使用情况
- 使用WiX设置ASP.Net版本
- asp.net – 从单独的配置文件中读取设置
- 如何在ASP.NET中的Web应用程序之间共享用户控件?
- asp.net-mvc – 通过伪造上下文测试:实体框架
- asp.net-mvc – 如何在html.LabelFor中显示一些文本?
- asp.net-mvc-3 – 模型绑定逗号分隔的查询字符串参数
- asp.net – 用于Microsoft.Office.Interop.Excel的Excel dl
- asp.net-mvc – 如何创建ELMAH SQL Server数据库?
- asp.net-mvc-3 – 如何正确使用RedirectToAction
推荐文章
站长推荐
- asp.net – 测试Oracle存储过程的最简单的方法
- asp.net-mvc – 自定义模型绑定,模型状态和数据注
- 将“onclick”属性添加到asp.net下拉列表项
- asp.net – 通过使用Javascript将邮政编码传递到
- asp.net-mvc – 如何将相同URL的GET和DELETE请求
- asp.net-core – 如何检索当前响应体长度?
- 设置ASP.NET页面不被缓存(客户端/服务器端取消缓
- asp.net-mvc – ASP.NET MVC 4覆盖发出的html名称
- asp.net – 在离开Gridview页面后维护GridView当
- asp.net – 必填字段验证器中的数字验证
热点阅读
