Я создаю приложение asp.net mvc, которое имеет концепцию пользователей. Каждый пользователь может редактировать собственный профиль. Например:
- PersonID = 1 может редактировать свой профиль, перейдя в http://localhost/person/edit/1
- PersonID = 2 может редактировать свой профиль, перейдя в http://localhost/person/edit/2
Ничего особенного в этом нет...
Тем не менее, я столкнулся с некоторыми проблемами в схеме авторизации. Сейчас в системе есть только две роли: "Администратор" и "DefaultUser", но скорее всего будет больше в будущем.
Я не могу использовать обычный атрибут Authorize для указания авторизации, потому что оба пользователя находятся в одной и той же роли (т.е. "DefaultUser" ).
Итак, если я задаю фильтр авторизации следующим образом:
[Authorize(Roles = "DefaultUser")]
то эффект не будет. PersonID = 1 может войти и отредактировать свой собственный профиль (как они должны быть), но они также могут просто изменить URL-адрес на http://localhost/person/edit/2 и у них есть полный доступ к редактированию профиля PersonID = 2 (что они не могут сделать).
Означает ли это, что я должен создать свой собственный фильтр авторизации, который проверяет, действительно ли действие, которое пользователь запрашивает "принадлежит" им, прежде чем разрешить им доступ? То есть, если действие редактирования с параметром = 1 запрашивается личным персоналом в настоящий момент, нужно ли выполнить пользовательскую проверку, чтобы убедиться, что личный пользователь в настоящий момент является PersonID = 1, и если да, авторизуйте их, а если нет, запретите доступ?
Похоже, что мне не хватает чего-то очевидного здесь, поэтому любое руководство будет оценено.