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管道)