0

因此,我为mvc网站设置了我的权限。我正在做一个基于角色的权限,根据操作的目的,在控制器中执行操作需要不同的角色。 我知道最推荐的是authorizeattribute(因为我想缓存角色),但它有可能与actionfilterattribute相同吗?使用actionfilterattribute的基于mvc角色的权限

目前我有类似这样的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() 
     { 
     } 
} 

所以,任何人的帮助被赞赏..甚至评论或想法a热烈欢迎:D

非常感谢!

+0

我写了类似的东西,并坚持它在SourceForge;它可能会为你节省一些时间。 https://sourceforge.net/projects/simplerolesecur/ –

+2

(不是一个实际的解决方案,所以这是一个评论,而不是)有一个伟大的博客文章,有些事情要记住或知道[这里](http:// blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application.aspx)。我发现它在最近的一个项目中非常有帮助。 –

+0

@rick liddle:这是一篇非常有用的文章。谢谢! -Jeremy:我会看看:) – gdubs

回答

0

看起来你没有在这里使用自定义会员。在这种情况下用actionfilterattribute来做这件事毫无意义,但仍然有能力。

就同一主题This is an excellent article - 延长AuthorizeAttribute来执行基于角色的验证和返回自定义错误......

也只有遇到当你希望显示(在文章中解释)做价值用户什么时候授权失败(401没有显示它变成一个302内部在mvc管道)