Данные профиля на основе ролей в asp.net ProfileProvider

Я определил несколько разных ролей на моем сайте asp.net: Администраторы, DefaultUsers. В настоящее время я использую встроенный профиль провайдера для хранения некоторой информации о пользователе (имя, фамилия, аватар...). Далее я хотел бы предоставить пользователю, который имеет роль "Администраторы", для хранения некоторых данных о его предпочтениях. (возможно EditorType, Уведомления,LogSize ...).

Это то, что можно сделать с поставщиком профиля по умолчанию? или мне нужно создать собственную таблицу или пользовательский провайдер и вести эти данные самостоятельно? Я хотел бы иметь свойства профиля на основе ролей. Любые идеи приветствуются!

3 ответа

Решение

То, чего вы хотите достичь, невозможно, поскольку один профиль привязан к одному пользователю, а не к роли. Пользователи могут иметь несколько ролей, но не несколько профилей.

Если вы все равно хотите это сделать, вы можете продолжать создавать свойства, доступные для всех пользователей, но эффективные только для тех, кто находится в Admin. только роль Вы можете сделать эту проверку в коде.

Я рекомендую вам не использовать ProfileProviders в этом сценарии. В этом случае все хранится в виде текста, что сильно ухудшит производительность приложения.

Вы не можете реально расширить встроенную систему, основанную на ролях, как уже заметил другой автор.

Однако, что вы могли бы сделать, чтобы сохранить свои текущие поставщики членства и роли ASP.NET и продолжать пользоваться их услугами, это просто создать таблицу расширений для aspnet_Roles. Что-то вроде этого:

CREATE TABLE dbo.MyOwnRoleExtensions
(ExtensionID INT IDENTITY(1,1) PRIMARY KEY,
 ApplicationId uniqueidentifier,
 RoleId uniqueidentifier,
 (whatever fields you need here......)
)

Затем вы можете установить отношение внешнего ключа к таблице aspnet_Roles в (ApplicationId, RoleId) и, таким образом, связать вашу таблицу "расширений ролей" с базовой таблицей aspnet_Roles.

Конечно, если вам нужно получить дополнительные поля в вашей таблице расширений, вы должны будете сделать это в своем собственном коде - но в этом случае вы все равно можете использовать и использовать все тонкости встроенного членства ASP.NET. и ролевые провайдеры, и вам не нужен грязный взлом или что-нибудь.

Марк

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

Как дополнительное преимущество, если кто-то временно лишил своих прав администратора, информация все еще сохраняется, и когда они возвращают их, все их старые значения все еще там. Конечно, вы можете очистить их или нет в зависимости от ваших требований.

Как и в любой системе безопасности, наличие определенного свойства у пользователя не должно влиять на роль / членство в группе, поэтому убедитесь, что вы все еще выполняете проверку user.IsInRole("Администраторы").

Другие вопросы по тегам