Я хочу сохранить это как можно более простым, чтобы не публиковать какой-либо код, поскольку он, вероятно, просто запутает вещи.
Я реализовал безопасность в своем приложении, используя авторизацию на основе ролей WCF.
Предположим, у меня есть 4 метода на моем общедоступном интерфейсе
- GetPerson
- DeletePerson
- UpdatePerson
- GetSurnameAndForename
Я прикрепил
[PrincipalPermission(SecurityAction.Demand,Role="POWERUSER")]
к первым 3 и
[PrincipalPermission(SecurityAction.Demand,Role="GENERALUSER")]
к последнему.
Это отлично работает,и предотвращает доступ 'GENERALUSER' к первым трем методам.
Однако метод GetSurnameAndForename внутренне вызывает метод GetPerson, который завершается ошибкой.Я понимаю, почему это не удается, но есть ли предпочтительный способ разрешить GetSurnameAndForename вызывать GetPerson, не имея роли POWERUSER?
Единственный способ, которым я могу думать об этом, - это добавить дополнительную проверку в метод IsInRole дляпроверьте CallStack, чтобы увидеть, пришел ли этот вызов из внутреннего метода или внешнего вызова.Это решение работает, но оно не очень элегантно.