Я думаю, вы хотите создать свой собственный объект IPrincipal.
Этот объект является общим как для winform, так и для веб-приложения.
Хотя вы можете назначить IIDentity свойству IPrincipal.IIDentity ........ Вы должны быть более заинтересованы в IPrincipal (вашей пользовательской конкретной версии), а не в IIdentity.
Ваш пользовательский IPrincipal будет иметь метод .IsInRole. Хотя мне не нравится безопасность на основе ролей (ПРАВА или РАЗРЕШЕНИЯ лучше, я считаю), существуют обходные пути.
Смотрите мое обсуждение здесь:
http://sholliday.spaces.live.com/blog/cns!A68482B9628A842A!846.entry
и вот одна работа вокруг .IsInRole вещи
http://www.lhotka.net/weblog/CommentView,guid,9efcafc7-68a2-4f8f-bc64-66174453adfd.aspx
Я бы создал один IPrincipal (ваша собственная версия) (например, MySuperCoolPrincipal.cs), абстрактный IIDentity (ваша собственная абстрактная версия, такая как MyAbractIIdenity: IIDentity) (
Затем вы можете ссылаться на MyAbractIIdenity в большей части вашего кода. Вы можете конвертировать в некоторых случаях, если это необходимо. (Например, если вам нужен IP-адрес вашего MyWebUser).
Помните, что если вы хотите проверить, МОЖЕТ ЛИ ЧТО-ТО ДЕЛАТЬ, то вы проверяете IIPrincipal, а НЕ ИХ ИДЕНТИЧНОСТЬ.
Могу ли я редактировать сотрудника? Проверьте IPrincipal.
Могу ли я увидеть этот отчет? Проверьте IPrincipal.
Могу ли я просмотреть специальное / секретное свойство этого объекта? Проверьте IPrincipal.
В большинстве случаев вас не волнует кто. Вы заботитесь о том, что они могут сделать.
.......
Теперь предположим, что пользователь имеет право / разрешение на "EDIT_EMPLOYEE".
Пользователь имеет это право, но пользователь не может редактировать ~~ каждого сотрудника в системе.
Они могут редактировать некоторых сотрудников.
Так что вы можете иметь два права.
EDIT_EMPLOYEE_ANY_DEPT
EDIT_EMPLOYEE_HOME_DEPT_ONLY
Видите разницу? И когда вы пытаетесь вызвать сотрудников, которых пользователь может редактировать, вам, возможно, придется проверить имеющуюся у вас пользовательскую IIDentity.
Возможно, вы создали свойство под названием
MyAbractIIdenity.HomeDepartmentKey
Вы можете проверить это свойство, чтобы определить, каких сотрудников вы можете редактировать, на основании разрешения: EDIT_EMPLOYEE_HOME_DEPT_ONLY
Если я что-то упустил, дайте мне знать.
Но я думаю, что вы можете передать только MySuperCoolPrincipal.
Посмотрите мою статью выше. Разработанный мной анти-паттерн помогает понять, что я говорю о правах (разрешениях) против ролей.
И я думаю, что это поможет с вещами IIdentity vs IPrincipal, о которых я упоминал выше.