Setelah ASP.net 2.0 keluar, saya selalu ingin menggunakan Membership 2.0, yang merupakan alat manajemen izin situs web yang dikemas dengan baik. Saya menggunakan SQLProvider, menggunakan aspnet_regsql untuk menghasilkan tabel yang diperlukan, dan mengkonfigurasi web.config. Namun, saya mengalami banyak masalah dalam penggunaan sebenarnya, termasuk mendapatkan pengguna yang saat ini masuk melalui Membership.GetUser() setelah masuk., kode hasil dikembalikan bagi saya adalah nol... Pengaturan otentikasi dan otorisasi yang disertakan dalam konfigurasi web tampaknya tidak berpengaruh sama sekali. Setelah beberapa pencarian, saya masih tidak dapat menyelesaikan masalah ini, jadi saya tidak punya pilihan selain menggunakan keanggotaan, tetapi mengimplementasikannya seluruh proses otentikasi dan otorisasi dengan sendirinya.
Karena kontrol login tidak berfungsi, saya sendiri yang menulis halaman login.aspx. Halaman ini menggunakan fungsi Membership.ValidateUser() untuk menilai login pengguna. Setelah pengguna berhasil login, nama pengguna pengguna disimpan di sesi.
Saya telah mengimplementasikan objek berseri XML yang dapat dikonfigurasi, yang memiliki struktur berikut
<?xml version="1.0"?>
<SecurityConfig xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd=" http://www.w3.org/2001/XMLSchema ">
<Lokasi Halaman>
<Lokasi PageLocation="~/admin/admin/RoleManager.aspx">
<Izinkan Peran="Administrator" />
</Lokasi Halaman>
</Lokasi Halaman>
</SecurityConfig>
PageLocations adalah kumpulan objek Daftar PageLocation. Lokasi di Pagelocation berisi halaman yang izinnya akan ditambahkan. Lokasi halaman berisi objek Izinkan, salah satunya adalah Peran, yang berisi peran pengguna yang dapat diotorisasi oleh halaman. Mereka dapat dipisahkan dengan koma, sehingga semua halaman ditambahkan ke struktur XML ini.
Kemudian implementasikan fungsi berikut:
/// <ringkasan>
/// Apakah akses ke halaman ini diperbolehkan
/// </ringkasan>
/// <param name="url">Jalur resmi</param>
/// <param name="rolenames">Peran otorisasi</param>
/// <returns>Apakah diotorisasi</returns>
bool publik isAllow(url Uri,string[] nama peran, konteks HttpContext)
{
string jalur=konteks.Server.MapPath(url.AbsolutePath);
Lokasi Halaman Lokasi = null;
foreach (Lokasi PageLocation di pageLocations)
{
strlokasi senar;
strlocation=konteks.Server.MapPath(lokasi.Lokasi);
if (strlocation.ToLower() == jalur.ToLower())
{
Lokasi = lokasi;
}
}
jika (Lokasi!= null)
{
string[] peran = Lokasi.Izinkan.Peran.Split(',');
foreach (peran string dalam peran)
{
foreach (string nama peran dalam nama peran)
{
if (nama peran == peran)
{
kembali benar;
}
}
}
kembali salah;
}
kalau tidak
{
kembali salah;
}
}
Dengan membandingkan jalur absolut halaman yang dikunjungi saat ini dengan jalur absolut dalam xml, lalu mendapatkan objek Pagelocation yang dijelaskan dalam xml, untuk menentukan apakah peran Izinkan cocok dengan peran pengguna saat ini.
Karena manajemen saya digunakan untuk manajemen keamanan latar belakang, saya menulis kontrol pengguna untuk merangkum kelas SecurityConfig, mendapatkan akun pengguna yang masuk melalui Context.Session[], dan kemudian mendapatkan login melalui Roles.GetRolesForUser(nama pengguna) Peran pengguna , lalu teruskan Context.Request.Url dan peran ke dalam fungsi tadi. Jika pengguna diberi otorisasi, halaman saat ini akan ditampilkan. Jika tidak, halaman loginnya akan melompat ke halaman tersebut atau meminta Anda bahwa Anda tidak memiliki izin tersebut .
Karena saya menggunakan MasterPage, dalam hal ini saya hanya perlu mengikat kontrol ini ke halaman master, sehingga setiap halaman berada di bawah manajemen, dan menulis halaman di latar belakang yang mengedit dan membuat serial objek SecurityConfig.
Mengadopsi metode ini juga merupakan ide bagus ketika Keanggotaan tidak berfungsi. Dengan cara ini, metode ini tidak hanya memanfaatkan fungsi dasar yang disediakan oleh Keanggotaan untuk pengguna seperti CreateUser dan CreateRoles, tetapi juga memenuhi kebutuhan pengaturan izin satu-satunya cara untuk menghadapinya sekarang.
Ini adalah pertama kalinya saya memposting di beranda, dan saya berharap seseorang dapat memberi tahu saya dalam keadaan apa otorisasi .net tidak berfungsi.
http://www.cnblogs.com/livesite/archive/2006/08/14/membership.html