我有一个内部企业ASP.NET MVC网站。
要求(1):当任何人在网络上时,他们可以访问此站点,除了一个AD组(例如:AD_Sales组)。
要求(2):此外,例如,如果有权访问的人将网址(例如:http://mysite/Home/Index/Product/Letter)传递给销售组人员,他仍然不应该访问需要显示一条自定义消息,说“您无权查看此页面”。
如果场景想要发出对一个AD组的访问权限并拒绝所有其他AD组的访问权限,那么情况就是如此。它可以从IIS完成。我想知道如何做到这一点。
是否有人为此方案实施了安全性?
感谢您的时间和回应。
由于
答案 0 :(得分:3)
我相信这对你有用......
2个步骤...... 你需要做的第一件事就是你的Global.asax.cs尝试把这个
protected void Application_AcquireRequestState(Object sender, EventArgs e)
{
//Context.Handler in this state, we can access Session.
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
{
//Is it a session created in this request?
if (Session.IsNewSession)
{
//Am I already authenticated?
if (User.Identity.IsAuthenticated)
{
//if already authenticated, check if it is logon, if not, we just logout,
//else, we can continue the logon and reset the user identity.
string url = Request.Url.ToString();
if (url.IndexOf("Account/LogOn") < 0)
{
FormsAuthentication.SignOut();
Response.Redirect(Request.RawUrl);
}
}
}
else
{
//Am I already authenticated?
if (User.Identity.IsAuthenticated)
{
try
{
/// Here we try to get the current role of the user logged in from the session
SessionUser myRole = CurrentUser.GetRole();
string[] strRole;
switch (myRole)
{
case Role.ADSales:
{
string[] Roles = { "ADSales" };
strRole = Roles;
}
break;
case Role.DeptHead:
{
string[] Roles = { "DeptHead" };
strRole = Roles;
}
break;
case Role.ProductionCrew:
{
string[] Roles = { "ProductionCrew" };
strRole = Roles;
}
break;
case Role.Admin:
{
string[] Roles = { "Admin" };
strRole = Roles;
}
break;
default:
throw new AuthenticationException(ErrorEnum.Impossible);
//break;
}
Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, strRole);
}
catch (Exception)
{
string url = Request.Url.ToString();
if (url.IndexOf("Account/LogOn") < 0)
{
FormsAuthentication.SignOut();
Response.Redirect(Request.RawUrl);
}
}
}
}
}
}
接下来在您的控制器中添加属性
[Authorize(Roles = "ProductionCrew,DeptHead,Admin")]
public ActionResult Letter()
{
Return View();
}
请注意,我没有在角色中包含ADSales,这意味着具有所述角色的用户无法访问页面信件。
希望这会有所帮助。如果有帮助,请投票,如果能解决您的问题,请不要忘记将其标记为答案。谢谢!
答案 1 :(得分:0)
您需要在应用程序的目录中启用Windows身份验证。然后更改所涉及的文件/目录的ACL以拒绝访问特定组。最后,将IIS 403错误映射到您的访问被拒绝方法。