0

我希望你沒事,這是我的第一個問題,我真的不知道從哪裏開始,所以這裏是,保護Web API基於角色的

我一直在試圖建立一個樣本與微軟的Web API模板在那裏我有例如基於角色的授權用戶「管理員,版主等......」這樣的事情是我不想把所有的這些角色像

控制器的頂部
[Authorize (Roles ="Admin, Moderators, etc...")] 

我認爲這不是一個好的做法,因爲如果我在我的數據庫中創建另一個角色會發生什麼?我將不得不修改控制器來添加新的角色xD,真的很糟糕,不是嗎?所以問題是。如何擴展一些類如AuthorizeFilter以從數據庫獲取角色並使用控制器進行驗證?我的意思是,如果有角色管理員的用戶授權並反之亦然?

另一個問題是如何建立一個偉大的authorzationfilter可以管理像如果用戶如果主持人的角色,但他唯一的權利是用戶控制器創建行動?

我希望你能幫助我用一個例子...提前

詩 感謝。對不起,我的英語

回答

1

我同意基於角色的授權以某種方式限制和授權的屬性是有點僵硬。

在某些情況下基於角色的授權是不夠的,你需要擴展它。您可以介紹權限概念。與其要求您必須是執行某個操作的特定角色的成員,您可以聲明被授權執行的操作需要特定的權限。因此,使用RequiredPermisionAttribute而不是授權屬性。當然你需要編寫RequiredPermissionAttribute作爲授權過濾器。

在數據庫中你有權限表,該RolesTable的RolePermissions表和UsersInRole表。

因此,一個用戶可以是一個或多個角色的成員。角色可以擁有一個或多個權限。如果用戶是具有該權限的角色的成員,則該用戶具有特定的權限。

必需的權限過濾器會檢查登錄的用戶是否具有權限的角色的成員,如果不是,則返回401未經授權。

這是一種更靈活的方法,操作不與角色綁定,角色沒有固定數量的權限。

+0

太棒了!正文,我想到了,我正在構建自己的權限表,並將角色表與其他用途一起用作將用戶添加到管理員角色,然後爲他分配權限(編輯,創建,刪除)並在我的行動的頂部我管理權限。非常感謝。 – AVMP 2015-03-07 01:33:31