Данные профиля на основе ролей в asp.net ProfileProvider - PullRequest
1 голос
/ 30 июля 2009

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

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

Ответы [ 3 ]

0 голосов
/ 30 июля 2009

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

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

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

0 голосов
/ 30 июля 2009

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

Однако, что вы могли бы сделать для того, чтобы сохранить свои текущие поставщики членства и роли 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, и вам не нужны никакие грязные хаки или что-либо еще.

Марк

0 голосов
/ 30 июля 2009

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

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

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

...