Mam dwie identyczne strony internetowe (po stronie aplikacji), jednak dane z
bazy są różne (podpięte są one do dwóch różnych baz danych) z tym
wyjątkiem, że dane personalizacyjne i role mam podpięte do jednej bazy
danych, tak aby użytkownicy obu storn mogli posługiwać się tym samym loginem
i hasłem. Jest jednak jeden problem otóż mam trzy role użytkownika
"administrator"
"dostawca"
"użytkownik"
i chcę aby administrator strony nr1 nie mógł się zalogować na stronie nr2 i
odwrotnie. Podobnie ze sprzedawcami chce aby mogli się oni logować tylko na
stronie na której się zarejestrowali w tej chwili mogą się logować na obu
stronach (wiadomo wspólna baza danych). Zwykły użytkownik może się logować
na obu stronach.
Jak sobie z tym poradzić? Wymyśliłem coś takiego aby do configa każdej ze
stron dodać jakaś zmienną, która będzie reprezentowała numer aplikacji. Ta
zmienna była by dodawana do profiles każdego użytkownika podczas jego
rejestracji. Mając takie dane mógłbym sprawdzać podczas logowania warunek
"jeżeli użytkownik to administrator, a jego numer aplikacji z profiles różni
się od numeru aplikacji z configa" to odrzuć prośbę o zalogowanie tego
użytkownika. Dobrze kombinuje? Trochę razi mnie takie rozwiązanie bo musiał
bym najpierw zalogować użytkownika aby dostać się do jego profiles, a
później w razie niedopuszczenia go wylogować. Ostatecznie mogę zrobić
dodatkową tabelę w bazie danych gdzie będę przechowywał dane na temat tego z
jakiej aplikacji zarejestrował się dany user. Hmm ale może da się to zrobić
jakoś bardziej elegancko? Druga sprawa, która mnie interesuje to Guid jeżeli
mam dwie aplikacje podpięte do tej samej bazy danych i każda tworzy numer
Guid za pomocą new Guid to czy nie będzie z tym problemu?
Tak to wygląda w kodzie:
public static Guid GetCurentGuid(Page p)
{
Guid g = Guid.Empty;
if (p.User.Identity.IsAuthenticated)
g =
(Guid)Membership.GetUser(p.User.Identity.Name).ProviderUserKey;
else
g = new Guid(p. Request.AnonymousID);
return g;
}
Coś mi się zdaje, że może się zdarzyć sytuacja w której aplikacja nr1
wygeneruje numer który był już wygenerowany przez aplikację nr2. Szczególnie
niepokoi mnie ta linijka g = new Guid(p. Request.AnonymousID); dodałem ją
tak a nie inaczej ponieważ do bazy danych mogą dodawać dane także
użytkownicy którzy nie są zarejestrowani. Z góry dzięki za wszystkie sugesie
i podpowiedzi.
To nie możesz utworzyć dwóch ról: administrator_a1 i administrator_a2?
G.
Pomysł jakiś jest ale raczej odpada bo musiał bym wtedy trochę przegrzebać w
aplikacji, w tej chwili mam ją zrobioną właśnie pod trzy rodzaje
użytkowników. A stron nie będzie 2 tylko kilka i tworzenie dla nich nowych
ról dla administratorów i dostawców było by trochę niewygodne.
jeśli dobrze rozumiem, to używasz SqlMembershipProvider i standardowej bazy
użytkowników. jeśli tak, to może napisz własnego providera, dziedziczącego z
SqlMembershipProvider, który w metodzie ValidateUser sprawdzi dodatkowo role
w jakich występuje użytkownik w konkretnej bazie danych.
Wiktor Zychla