0

我選擇'個人用戶帳戶'時使用最新和最大的身份3.x來與股票與MVC6核心1.0。ASP.NET身份和創建角色功能

我的用戶身份驗證的要求如下:

Users -> AspNetUsers 
Roles -> AspNetRoles 
UserRoles -> AspNetUserRoles 
RoleFunctions -> I don't see a table for this in the Identity db structure 

RoleFunctions是任何類型的系統功能,如DeleteCustomers,AccessToCustomerPage等

我要承擔ASP.NET身份不支持基於角色的身份驗證的額外步驟,因此我將不得不自己創建表和函數。這是真的嗎?還是僅僅是爲了我,我只是沒有看到它?

+0

我想你指的是** **的政策。我猜你會有一個已知數量的角色函數,它們將在你的代碼中被知道(除非你的目標是一些動態)?您可以考慮對它們進行硬編碼並創建策略,例如「爲了刪除客戶,用戶必須擁有這個,這個和/或這個角色」。看看這裏:https://docs.asp.net/en/latest/security/authorization/roles.html#policy-based-role-checks – regnauld

+0

好,所以你說,如果我有一堆全局常量的所有角色功能和使用政策,我不應該需要RoleFunctions表?問題是我需要在功能級而不是角色級執行所有的檢查。例如:如果當前登錄的用戶是包含DeleteCustomer的角色的一部分,則在視圖模型中顯示垃圾桶。 –

回答

0

Identity允許您根據控制器或控制器中的特定操作確定授權。

[Authorize] 
public void controllermethod(param) {} 

授權將需要身份驗證才能訪問此操作或控制器。

所以,如果你想創建一個只有管理員可以執行操作(或已創建的任何用戶角色組),控制器以上方法你會把

[Authorize(Roles="admin")] 
public void controllerMethod(param) {} 

角色可以接受的列表字符串,如(角色=「管理」,「經理」),所以你可以把多個角色放在一個授權聲明中。

您也可以在控制器級別執行此操作,強制控制器中的每個操作都遵守您的授權聲明。基本上,如果你把它的控制器聲明的每一個動作都會受到影響上面,但你可以白名單與

[AllowAnonymous] 
public void nosecuritycontrolleraction {} 

一個特定的動作,我希望這是你在找什麼,你可以在這裏找到更好的嚮導: http://www.asp.net/identity

UPDATE 1 對於DeleteCustomer示例,我假設您在處理刪除客戶對象的控制器中有一些方法。在這些方法之上,放置[Authorize(Roles =「CustomerAdmin」)],然後只有UserRoles中具有customerAdmin角色的用戶可以使用該操作。

喜歡:

[Authorize(Roles="CustomerAdmin")] 
public ActionResult DeleteCustomer(string/int id){} 
+0

這與我正在尋找的東西很接近。你能否更新你的文章以適應這個例子:有一個叫做CustomerAdmin的角色。我在哪裏可以指定CustomerAdmin可以執行哪些功能?假設他們可以查看和刪除客戶。比方說,在ViewModel中,我只想爲具有角色CustomerAdmin的用戶顯示垃圾桶圖標。我寧願做一個檢查,說明用戶是否具有刪除客戶功能然後顯示垃圾箱的任何角色。這是我的RoleFunctions部分發揮作用的地方。 –

+0

上面我想說的是,我更喜歡在功能級別而不是角色級別執行所有檢查。例如:如果當前登錄的用戶是包含硬編碼函數DeleteCustomer的角色的一部分,則在視圖模型中顯示垃圾箱。你將如何建立一個這樣的系統? –

+0

對於DeleteCustomer示例,我假設您在處理刪除客戶對象的控制器中有一些方法。在這些方法之上,放置[Authorize(Roles =「CustomerAdmin」)],然後只有UserRoles中具有customerAdmin角色的用戶可以使用該操作。 –