ASP .NET Membership jest bardzo dobrym rozwiązaniem dla uwierzytelnienia oraz autoryzacji użytkowników w aplikacji webowej. Umożliwia m.in. zarządzanie kontami użytkowników czy tworzenie ról. Często jednak system składa się również z aplikacji typu desktop. W rozbudowanych systemach proponuję zrezygnować z czystego ASP .NET Membership na rzecz Windows Identity Framework. Jeśli jednak tworzymy małą aplikacje z pewnością przyda nam się wsparcie ASP .NET Membership w WinForms.
Rozwiązaniem problemu są tzw. client application services. Zacznijmy jednak od samego początku:
-
Najpierw tworzymy oczywiście aplikację web ASP .NET.
-
Oprócz autoryzacji istnieje również możliwość udostępniania właściwości aplikacji WinForms. Dodajemy przykładową właściwość:
<profile> <properties> <add name="Color" type="string" defaultValue="Blue"/> </properties> </profile> ... </system.web>
- W celu udostępnienia właściwości Color wystarczy w w web.config dodać następujący wpis:
<system.web.extensions> <scripting> <webServices> <authenticationService enabled="true" /> <roleService enabled="true"/> <profileService enabled="true" readAccessProperties="Color" writeAccessProperties="Color"/> </webServices> </scripting> </system.web.extensions>
Powyższy kod również udostępnia usługę uwierzytelnienia oraz zarządzania rolami.
Następnym etapem jest konfiguracja aplikacji WinForms:
-
Tworzymy aplikacje typu WindowsForms.
-
Wchodzimy we właściwości projektu a konkretnie w zakładkę Services. Następnie ustawiamy prawidłowy adres. Jeśli zakłada nie jest aktywna to prawdopodobnie został ustawiony .NET Framework Client Profile i należy ustawić np. NET Framework 4.0.
-
Wchodzimy w zakładkę Settings oraz klikamy w przycisk Load Web Settings. Po wpisaniu loginu i hasła zostaną zwrócone udostępnione właściwości:
Od tej pory w kodzie aplikacji WinForms możemy odwoływać się do właściwości jak do zwykłych zasobów, np:
public Form1() { InitializeComponent(); if(Login()) this.BackColor = Color.FromName(Properties.Settings.Default.Color) ; } private bool Login() { bool result = System.Web.Security.Membership.ValidateUser("admin", "password"); if (result) MessageBox.Show("Zalogowano.", "Autoryzacja", MessageBoxButtons.OK,MessageBoxIcon.Information); else MessageBox.Show("Nieprawidłowy login lub hasło.", "Autoryzacja", MessageBoxButtons.OK,MessageBoxIcon.Error); return result; }
Podobnie można zapisywać właściwość:
Properties.Settings.Default.Color = Color.Red.ToString(); Properties.Settings.Default.Save();
W celu przekonania się, że to naprawdę działa ustawmy kolor również w aplikacji web:
protected void Page_Load(object sender, EventArgs e) { Button1.BackColor = System.Drawing.Color.FromName(Context.Profile.GetPropertyValue("Color").ToString()); }
Oczywiście aby kod zadziałał użytkownik musi być zalogowany (np. za pomocą gotowej kontrolki Login).
W podobny sposób można używać metody InRole (sprawdzanie czy użytkownik należy do danej grupy). Warto podkreślić, że za pomocą client application service można korzystać z Membership również w aplikacjach WPF, AJAX czy nawet Silverlight.
dzieki za posta, był mi bardzo pomocny!