Mam aplikację MVC uwierzytelnianą w systemie Windows z warstwą repozytorium. Cała interakcja kontrolera z bazą danych odbywa się za pośrednictwem repozytorium. Każdy kontroler ma odniesienie do repozytorium:Wzór wykonywania autoryzacji w warstwie repozytorium aplikacji MVC
public class PostController : Controller
{
private Repository db = new Repository();
[HttpPost]
public ActionResult DeletePost(int id)
{
// Authorize that the user is allowed to delete this post...
db.DeletePost(id);
}
}
Moje pytanie brzmi, czy jest to dobry sposób, aby przenieść moją logikę autoryzacji w repozytorium warstwy. Chciałbym, aby funkcja Repository.DeletePost()
odmawiała usuwania wpisów, które nie zostały utworzone przez uwierzytelnionego użytkownika. Problem polega na tym, że moje repozytorium nie wie, kto jest uwierzytelnionym użytkownikiem. Sterownik wie (przez Controller.User
).
Mijając Controller.User
do konstruktora Repository
nie działa, ponieważ Controller.User
najwyraźniej nie zdefiniowane w momencie, gdy konstruktor jest tzw.
W jaki sposób mogę poinformować użytkownika, którego uwierzytelnionym użytkownikiem jest? Czy najlepiej byłoby po prostu zbudować Repository
w ramach każdej akcji? Czy jest to zły pomysł, aby obsłużyć go w warstwie repozytorium?
To właśnie robię, ale uważam, że nie ma wystarczającego "oddzielenia", ponieważ teraz nasze repozytorium jest powiązane z naszym Użytkownikiem, którym może być jakiś Administrator, który nie byłby w stanie nic zrobić, gdyby nie za to na każdym kroku – Worthy7