2010-05-27 3 views
0

Есть встроенные методы в рамки .net сделать следующее:Перекрытие SqlMembershipProvider

  1. Получить роль GUID от имени пользователя/пользователя GUID
  2. Получить имя роли из роли GUID

Так далеко я отправлял запросы в таблицы asp_roles и asp_users, чтобы получить эту информацию, и мне интересно, есть ли более хороший способ сделать это?

У меня есть следующие методы, которые я храню в классе ASPUtilities:

getRoleGUID(guid userGuid) { LINQ joins } 

getRoleGuid(string userName) { LINQ joins } 

getRoleName(guid roleGuid) { LINQ joins } 

EDIT:

Я только заглянул в простирающийся SqlMembershipProvider примеры.

Несколько примеров полностью переопределяют SQLMembershipProvider, но я думаю, что меня интересует только добавление нескольких дополнительных методов для работы с ролями с помощью LINQ. Это возможно?

+0

Вы просмотрели класс Role, если он раскрывает все это? –

+0

Он раскрывает имена ролей, но не роль guid. Моя главная цель - получить роль guid от имени роли и наоборот. – 2010-05-27 09:27:12

+0

Я немного поработал с поставщиком членства, и мне было бы интересно узнать, зачем вам нужна роль guid? – jim

ответ

1

Если вы распространите поставщик SQLMembership, он сделает то же самое, отправьте запросы в базу данных, чтобы получить эту информацию, поскольку roleID не хранится в сеансе. Если вы не хотите испытывать столько неприятностей, вы можете сделать несколько вещей.

  1. Создайте собственный класс с помощью этих методов, которые вы можете вызвать и вернете идентификатор вашей роли. По существу, переместите все ваши запросы в одно место.
  2. Сохраните идентификатор роли в сеансе при входе в систему. Вызовите свой метод, который вы создали выше, и не будете требовать каждый раз. Однако не 100% рисков безопасности с этим, поскольку вы храните некоторую, возможно, важную информацию о роли, идентификатор в сеансе. Могу быть слишком осторожным, хотя :)
+0

Эй, Спасибо за совет. Да, это то, что я сейчас делаю. Я не слишком заинтересован в сохранении роли в переменной сеанса, так как это будет список ролей, и пользователь может быть добавлен/удален в/из ролей администратором, поэтому информация в сеансе будет не синхронизирована , Класс полезности кажется разумным вариантом, я просто не слишком увлекаюсь получением некоторых данных из классов .Net и некоторых из своих классов, но пока не могу найти альтернативы. Возможно, это не такая уж плохая реализация ... – 2010-05-27 13:01:51

+0

Для простоты и маскировки получения данных из некоторых классов .NET и ваших собственных классов, оберните методы .NET с помощью собственного имени метода в вашем классе utiltiy. IE, утилитаClass.getRoleName() возвращает httpcontext.current.user.getRoles (или что-то еще такое). Может помочь очистить некоторые из них, но это действительно единственное преимущество для этого. – Tommy

+0

Эй, Томми, спасибо за эту идею. Он будет «централизован», и в контроллере/веб-методах не будет много кода. – 2010-05-28 07:31:11

Смежные вопросы