所以我正在建立我对mvc网站的许可。我正在做一个基于角色的权限,在控制器中执行操作需要不同的角色,具体取决于操作的目的。 我知道最推荐的是authorizeattribute(因为我想要缓存的角色)但是有可能和actionfilterattribute一样吗?
目前我有一个类似于此的actionfilterattribute:
public class PermissionRequired : ActionFilterAttribute{
private readonly Role reqrole;
public PermissionRequired(Role reqRole)
{
reqrole = reqRole;
}
public override void OnActionExecuting(ActionExecutingContext filterContext) {
var ctrl = (GeneralController)filterContext.Controller;
if (!ctrl.CurrentUser.InRole(reqrole)) {
//some code to redirect this to a certain page
}
base.OnActionExecuting(filterContext);
}
}
并在GeneralController上获取当前用户
public class GeneralController : Controller
private User currentUser;
public User CurrentUser {
get {
if (currentUser != null)
return currentUser;
int currentUserId = Convert.ToInt32(httpContext.User.identity.Name);
if (currentUserId != 0) {
this.currentUser = Tds.Users.FirstOrDefault(u => u.Id == currentUserId)
}
return currentUser;
}
}
以及将继承此属性的控制器
[PermissionRequired(Role.Moderator)]
public class SomeControllerThatNeedsPermission
{
[PermissionRequired(Role.SuperAdmin)]
public ActionResult SomeActionThatNeedsPermission()
{
}
}
所以,任何人的帮助都表示赞赏..甚至欢迎评论或想法:D
非常感谢!
答案 0 :(得分:0)
您好像没有在这里使用自定义会员资格。在这种情况下,使用actionfilterattribute执行此操作有点毫无意义,但仍然可以。
关于同一主题的This is an excellent article - 扩展AuthorizeAttribute以执行基于角色的验证并返回自定义错误......
当您希望向授权用户显示授权失败时(401未显示在mvc管道内部变为302)时,这样做的价值也只会出现(如文章中所述)< / p>