Kyl*_*yle 8 authentication asp.net-mvc roleprovider membership-provider
基本上我想在某人不属于我的属性中列出的角色时显示友好消息.目前我的应用程序只是将用户吐回到登录屏幕.我已经阅读了几篇关于创建一个仅扩展[AuthorizeAttribute]的自定义属性的帖子,但我认为必须有一些开箱即用的东西才能做到这一点?
有人可以指出我在正确的方向,我需要看到没有它将用户发送到登录表格,而只是拍摄他们"未授权"的消息?
小智 6
我可能在添加$ 0.02时有点晚,但是当您创建CustomAuthorizationAttribue时,可以使用AuthorizationContext.Result属性来指定AuthorizeAttribute.HandleUnauthorizedRequest方法指向用户的位置.
这是一个非常简单的示例,允许您指定在授权失败后应该发送用户的URL:
public class Authorize2Attribute : AuthorizeAttribute
{
// Properties
public String RedirectResultUrl { get; set; }
// Constructors
public Authorize2Attribute()
: base()
{
}
// Overrides
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (String.IsNullOrEmpty(RedirectResultUrl))
base.HandleUnauthorizedRequest(filterContext);
else
filterContext.Result = new RedirectResult(RedirectResultUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想按照上一篇文章的建议将用户重定向到/ Error/Unauthorized:
[Authorize2(Roles = "AuthorizedUsers", RedirectResultUrl = "/Error/Unauthorized")]
public ActionResult RestrictedAction()
{
// TODO: ...
}
Run Code Online (Sandbox Code Playgroud)
如果您想要简单或完全控制逻辑,您可以在操作方法中调用它:
User.IsInRole("NameOfRole");
Run Code Online (Sandbox Code Playgroud)
它返回一个布尔值,您可以根据该结果执行其余的逻辑。
我在某些情况下使用的另一种是:
System.Web.Security.Roles.GetRolesForUser();
Run Code Online (Sandbox Code Playgroud)
我认为这会返回一个 string[] 但不要引用我的观点。
编辑: 一个例子总是有帮助的......
public ActionResult AddUser()
{
if(User.IsInRoles("SuperUser")
{
return View("AddUser");
}
else
{
return View("SorryWrongRole");
}
}
Run Code Online (Sandbox Code Playgroud)
只要您的返回类型是“ActionResult”,您就可以返回任何接受的返回类型(ViewResult、PartialViewResult、RedirectResult、JsonResult...)
| 归档时间: |
|
| 查看次数: |
4323 次 |
| 最近记录: |