SORU
17 EYLÜL 2009, PERŞEMBE


ASP.NET MVC ile bir oturum Açma Sistemi oluşturmak, ancak Gelen kullanmamak mümkün mü?

Kullanıcıların bir tablo ile varolan bir veritabanı ve veritabanı almak ve yeni bir sistem ASP.NET MVC inşa için kullanmayı planlıyoruz. Ancak, ne olduğum belirsiz ile ilgili olup olmadığını ben mümkün oluşturmak için bir oturum açma sistemi yok kullanım dahili hesap denetleyicisi veya normal üyelik sağlayıcısı için elimizden hala mevcut tablo yapısı.

Benim sorum, bu mümkün olurdu? Ya da özellikle zor olsa bile, bunu yapmak?

Şeyler ve basit yapmak için en yaygın olarak kabul gören bir yolu nedir?

CEVAP
17 EYLÜL 2009, PERŞEMBE


Bu aynı gereksinimi vardı. Kendi kullanıcı ve benim rolüm şema vardı ve ASP.NET üyelik şema göç etmek istemiyordu ama kontrol yetkilendirme ve roller için ASP.NET MVC eylem filtreler kullanmak istiyorum. Araştırma adil bir miktar yapmak için yapılması gereken tam olarak ne öğrenmek zorunda kaldım, ama sonunda nispeten kolay oldu. Sizi bu dertten kurtarmak ve ne yaptığımı söyleyeyim.

1) sisteminden türetilmiş bir sınıf oluşturdu.Web.Güvenlik.Gelen. Gelen Şifremi unuttum gibi kimlik doğrulaması ile ilgili fonksiyonları her türlü için soyut yöntemler bir ton var, Şifre değiştirme, kullanıcı oluşturmak, vb. Tek istediğim benim kendi şema karşı doğrulamak için yeteneği oldu. Benim sınıf önemsenmeyecek kadar geçersiz kılar içeriyordu. Ben sadece ValidateUser bozdu:

public override bool ValidateUser(string username, string password)
{
    if (string.IsNullOrWhiteSpace(username) ||
        string.IsNullOrWhiteSpace(password))
      return false;

    string hash = EncryptPassword(password);
    User user = _repository.GetByUserName(username);
    if (user == null) return false;

    return user.Password == hash;
}

2) sisteminden türetilmiş bir sınıf oluşturdu.Web.Güvenlik.RoleProvider. Yine, ben sadece ve rolleri oluşturma ve değiştirme gibi ihtiyacım yoktu tüm kabartmak için boş uygulamaları vardı. Sadece iki yöntem bozdu:

public override string[] GetRolesForUser(string username)
{
    User user = _repository.GetByUserName(username);
    string[] roles = new string[user.Role.Rights.Count   1];
    roles[0] = user.Role.Description;
    int idx = 0;
    foreach (Right right in user.Role.Rights)
        roles[  idx] = right.Description;
    return roles;
}

public override bool IsUserInRole(string username, string roleName)
{
    User user = _repository.GetByUserName(username);
    if(user!=null)
        return user.IsInRole(roleName);
    else
        return false;
}

3) Daha Sonra benim web içine iki sınıf taktım bu.config:

<membership defaultProvider="FirstlookMemberProvider" userIsOnlineTimeWindow="15">
  <providers>
    <clear/>
    <add name="FirstlookMemberProvider" type="FirstlookAdmin.DomainEntities.FirstlookMemberProvider, FirstlookAdmin" />
  </providers>
</membership>
<roleManager defaultProvider="FirstlookRoleProvider" enabled="true" cacheRolesInCookie="true">
  <providers>
    <clear/>
    <add name="FirstlookRoleProvider" type="FirstlookAdmin.DomainEntities.FirstlookRoleProvider, FirstlookAdmin" />
  </providers>
</roleManager>

İşte bu kadar. Varsayılan yetkilendirme eylem filtreler bu sınıfları kullanacak. Hala ve imzalar giriş sayfasını işareti işlemek gerekir. Sadece standart her zamanki gibi bunun için kimlik doğrulama sınıfları oluşturur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Tedeyev

    David Tedeye

    20 AĞUSTOS 2011
  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007
  • SlimaksClass

    SlimaksClass

    15 Kasım 2010