свободное тестирование блока безопасности

Я поздно написал несколько тестов для своей конфигурации Fluent Security. Хотя я могу написать тесты, проверяющие, применяется ли к методу действия контроллера определенная политика, например.

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

Тем не менее, я ищу, могу ли я написать тесты для конкретных ролей.

например, если я предоставил роль администратора доступ только к Index() HomeController, я хочу проверить что-то вроде

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

Я не нашел ни одного примера в сети или каких-либо расширений в FLuentSecurity.TestHelper, которые могли бы помочь мне в этом. есть идеи?


person Renu    schedule 22.05.2012    source источник


Ответы (2)


Расширение Has имеет перегрузку, которая принимает предикат:

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

Как видите, RequireRolePolicy предоставляет свойство RolesRequired, с которым вы можете протестировать.

Если вы обнаружите, что много проверяете определенный набор ролей, я бы порекомендовал создать пользовательскую политику и вместо этого просто проверять эту политику. Пример этого (AdministratorPolicy) есть в образце приложения на github: https://github.com/kristofferahl/FluentSecurity/blob/master/FluentSecurity.SampleApplication/AdministratorPolicy.cs

person Kristoffer Ahl    schedule 28.05.2012
comment
Рад это слышать! Пожалуйста, не забудьте принять это как ответ на вопрос. - person Kristoffer Ahl; 30.05.2012

Хотя у меня это заработало, я обнаружил серьезное ограничение для Fluent Security. Он не может различать два метода действия с одинаковым именем!

e.g.

public ActionResult Edit(int id){}

и

[HttpPost]
public ActionResult Edit(SomeCommand command){}

если я хочу предоставить доступ к гостю при редактировании (получение) и редактировании (публикации) пользователю-администратору, я не могу сделать это с помощью Fluent Security, поскольку он идентифицирует оба метода как один. Я не буду рекомендовать эту библиотеку, так как это серьезное ограничение!

person Renu    schedule 29.05.2012
comment
Мне жаль, что вам не хватает FluentSecurity в некоторых областях, но этот ответ не имеет ничего общего с вашим первоначальным вопросом. Пожалуйста, удалите этот ответ! Что касается функции, которой вам не хватает, мы постоянно работаем над улучшениями, и если вы разместите сообщение о проблеме на github, мы сделаем все возможное, чтобы поддержать ваш запрос. - person Kristoffer Ahl; 30.05.2012