Что-то действительно запутанное в том, как роли и таблицы членства устанавливают отношения - PullRequest
1 голос
/ 20 мая 2009


Я знаю, как создавать пользователей и назначать их для ролей и т. Д., Но когда я попытался немного глубже понять, как роли и таблицы членства могут устанавливать отношения друг с другом, я полностью растерялся (кстати, я знать, как работают внешние / первичные ключи;))

Кстати - я создал таблицы в базах данных с помощью мастера aspnet_sqlreg


Q1 - Оба SqlRolesProvider и SqlMemebershipProvider имеют свойство ApplicationName . Я подумал, что для того, чтобы два провайдера могли создавать ассоциации между своими пользователями и ролями, им обоим придется использовать одно и то же значение для свойства ApplicationName . Но, похоже, это не так.

A) В любом случае, я предполагаю, что свойство SqlRolesProvider.ApplicationName используется только для различения записей таблицы, принадлежащих разным поставщикам ролей, но они не используют это свойство для того, чтобы связывать свои роли только с провайдеры с одинаковым значением ApplicationName ?!

B) Но не было бы наиболее практичным, если бы поставщики ролей могли быть связаны только с поставщиками членства с тем же значением ApplicationName (таким образом, где SqlRolesProvider.ApplicationName == SqlMemebershipProvider.ApplicationName) ?!



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


А) Но почему это? А именно, если SqlRolesProvider.ApplicationName = «roleP" ( ApplicationID = 10 ) и SqlMembershipProvider.ApplicationName = «members» ( ApplicationID = 100 ), тогда для того, чтобы таблица в DB1 имела связь с таблицей в DB2 , они должны будут ссылаться друг на друга через запись ApplicationName (фактически через ApplicationID), который будет действовать как внешний / первичный ключ.

Но дело в том, что ни одно из полей внешнего ключа в таблицах DB1 не содержит значения, равного SqlMembershipProvider.ApplicationID = 100 , что предполагает, что между установленными отношениями нет таблицы в DB1 и DB2 (я знаю, что это не так, поскольку я могу назначать пользователей ролям). Так чего мне не хватает?


1076 * спасибо *


EDIT:

Э-э, не знаю, будет ли кто-нибудь еще читать это, но я еще немного покопался и запутался:

Если обе роли (с applicationName = R1 и applicationID = 10 ) и поставщик членства (с applicationName = M1 и с ApplicationID = 100 ) находятся в той же БД, затем создание нового пользователя вызывает aspnet_Users В таблице два создаются две записи для одного и того же имени пользователя - одна с ApplicationID = 10 , а другая с ApplicationID = 100 . Насколько я знаю, при создании нового пользователя в aspnet_Users должно быть добавлено только одно поле (с ApplicationID = 100 ). Э-э?!

Ответы [ 2 ]

2 голосов
/ 20 мая 2009

Вы смотрели таблицу aspnet_UsersInRoles. Это таблица, которая связывает пользователя с ролью. RoleProvider разработан, чтобы быть отдельным от MembershipProvider, чтобы вы могли иметь их в отдельных БД. Кроме того, он позволяет вам устанавливать роли для одного имени приложения и повторно использовать эти роли в двух отдельных приложениях, каждое из которых имеет свое имя приложения для поставщика членства. Не зацикливайтесь на том, что вам нужно иметь одинаковое имя приложения для обоих провайдеров или что имя вашего приложения должно соответствовать запущенному приложению. Вам не нужно вообще иметь имя, если вы этого не хотите. Я надеюсь, что это помогает.

1 голос
/ 20 мая 2009

Мне было трудно понять, что вы говорите ...

В любом случае ... вы, кажется, слишком много смотрите на базу данных. Вы настроили web.config для своих провайдеров членства и смогли ли вы запросить «Членство» с помощью запросов C # и НЕ SQL?

...