Buduję interfejs API REST, dla którego kilku użytkowników z różnymi rolami będzie miało dostęp do zasobów w nim zawartych.
Aby uprościć zakres, weźmy domenę „uczeń / nauczyciel / klasa”:
GET /students
jest zasobem do uzyskania dostępu.
Użytkownicy mogą pełnić role takie jak Student i / lub Nauczyciel
Studenci będą mieli dostęp tylko do uczniów swoich klas. Nauczyciele będą mieli dostęp do uczniów klas, których nauczają. Niektóre zastosowania mogą być uczniem ORAZ uczyć także innych klas. Muszą mieć dostęp do uczniów swoich klas ORAZ do uczniów klas, których nauczają.
Idealnie chcę zaimplementować to jako dwie funkcje - po jednej na rolę, a następnie „unii”, jeśli użytkownik ma wiele ról.
Moje pytanie brzmi: jakiego wzoru należy użyć do wdrożenia tego?
Zewnętrznie
- Czy powinienem podzielić mój interfejs API na rolę?
GET /teacher/students
iGET /student/students
nie wydaje mi się to właściwe. - Zachowaj wszystko, jestem jednym zasobem (preferowane)
Wewnętrznie
Jak należy to wdrożyć wewnętrznie?
- Czy każda metoda powinna zaczynać się od BIG switch / if per role?
- Czy powinienem wdrożyć repozytorium według roli?
- Czy istnieje wzór, który pomoże mi to osiągnąć?
Na marginesie: używam ASP.NET Web API i Entity Framework 6 , ale tak naprawdę nie ma to znaczenia dla implementacji koncepcyjnej.