2

我一直在寫關於Fluent Security配置的測試。儘管我可以編寫測試來驗證控制器操作方法是否應用了特定的策略,例如流利的安全單元測試

expectations.Expect<HomeController>(x=>x.Index()).Has<IgnorePolicy>(); 

但是,我在尋找的是,如果我可以編寫角色特定的測試。

例如,如果我有隻給HomeController的指數()管理員角色的訪問,我想測試類似

expectations.Expect<HomeController>(x=>x.Index()).Has<RequireRolePolicy>().For("Admin"); 

我不覺得在FLuentSecurity.TestHelper淨任何實例,或任何擴展,可以幫助我做到這一點。有什麼想法嗎?

回答

2

的具有延伸具有過載,需要一個斷言:

expectations.Expect<HomeController>(x => x.Index()) 
    .Has<RequireRolePolicy>(policy => policy.RolesRequired.Contains("Admin")); 

正如你可以看到RequireRolePolicy暴露了RolesRequired屬性,您可以測試反對。

如果您發現自己正在爲特定角色做很多檢查,我建議您創建一個自定義策略,然後檢查該策略。在github上的示例應用程序中有一個示例(一個AdministratorPolicy):https://github.com/kristofferahl/FluentSecurity/blob/master/FluentSecurity.SampleApplication/AdministratorPolicy.cs

+0

謝謝。有效。 – Renu

+0

很高興聽到它!請不要忘記接受這個問題的答案。 –

0

雖然我得到了這個工作,但發現對Fluent Security有嚴重限制。 它不能區分兩個同名的動作方法!

例如

public ActionResult Edit(int id){} 

[HttpPost] 
public ActionResult Edit(SomeCommand command){} 
如果我想給訪問客戶的編輯(GET)和Edit(郵政)管理員用戶

,因爲它確定這兩種方法無法通過流利的安全性做作爲一個。我不會推薦這個庫,因爲這是一個嚴重的限制!

+0

很抱歉,您發現FluentSecurity在某些區域缺乏,但此答案與您的原始問題無關。請刪除這個答案! 至於你錯過的功能,我們一直在進行改進,如果你在github上發佈一個問題,我們將盡我們所能來支持你的請求。 –