2013-03-14 101 views
0

我終於得到了我的MVC 4應用程序,所有這些應用程序都使用SimpleMembership進行設置,但現在遇到了一個新問題。我有一個菜單系統(在邊欄中),讓用戶可以訪問整個應用程序的各種功能。我最近意識到,爲了方便用戶,我需要根據角色禁用或刪除各種菜單鏈接。所以我建立了一個角色系統和與這些菜單鏈接的關係,這很好地工作。然而,「基本站點訪問」角色不應該有權訪問全部的菜單中的鏈接(及其相應的控制器/操作)。此前,我曾通過簡單地將全球範圍內Authorize屬性給出站點的訪問,通過我的過濾器配置:DynamicMembership的動態角色/層次結構

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new AuthorizeAttribute()); 
} 

現在我想通了,爲了控制「基本」訪問應用程序,我需要在操作級別添加個人Authorize屬性(「admin」角色具有完全訪問權限)。雖然這很好,儘管有點煩人,但它看起來不可擴展。如果我的客戶端通過管理界面添加新角色並希望控制對各種任務的訪問,該怎麼辦?我已經對菜單系統進行了編碼,以根據哪些角色可以訪問哪些任務來動態禁用鏈接。但是,我不知道如何動態地將不同的角色應用於Authorize屬性。

雖然我讀過有關why SimpleMembership may not be the bee's knees,我剛剛完成從ASP.NET成員(其中有它自己的嚴重缺點)遷移,我當然不希望要推出自己的用戶/角色管理系統。有沒有人成功實施了一些處理這種情況?

回答

2

如果您有很多控制器/操作您不想用註釋修飾,那麼您一定要看看Fluent Security

它允許從Global.asax處理所有授權。這是有據可查的,並有一個很好的教程here

+0

我從來沒有聽說過這個,但它看起來很有希望。謝謝!我打算留下這個問題,看看是否有其他人想要權衡。 – 2013-03-27 14:04:15

+0

Fluent Security是否符合您的要求? – MattSull 2013-04-02 12:04:17

+1

對不起,我還沒有時間去實現它!當我有機會玩這個遊戲時,我肯定會再次發帖。 – 2013-04-02 14:37:23