SORU
4 EYLÜL 2012, Salı


Rol yeni bir MVC 4 Internet şablonu simplemembership kullanarak kimlik doğrulaması

MVC 4 yeni simplemembership özelliği VS harici giriş için OAuth bağlantılar ile internet şablonu 2012 RTM seviyorum. Çoğunlukla kimlik doğrulama özelliği çalışıyor. Ancak bu bile üzerinde 8 saat geçirdikten sonra roller yetki benim denetleyicileri üzerinde çalışmak için temel uygulamak için kuramıyorum. SimpleMembership hiç de basit oluyor.

Stackoverflow aradım, aradım internette John Galloway birçok öneri çalıştı en geç okudum ve hala bu sorunu resovle için mümkün olmamıştır. Bu bağlantı hatası Sql ile başladı ve bağlantı dizesi ve her şey iyiydi neden çözemedim. Soruna neden olan bu Rolleri sınıf anlamaya saatlerce sürdü.

Denetleyicileri [Yetki] özniteliği temel kimlik doğrulaması için daha önce olduğu gibi çalışır. Ama Roller kullanmaya çalışıyorum her zaman sql bağlantı hatası I aspnetdb dosya varsayılan olarak bağlanmak için çalışan eski DefaultRolesProvider döner ve başarısız çünkü) ver. Bir şey gibi

[Authorize(Roles="admin")]

çalışmıyor. Olacak iş gidersem geri eski asp.net üyelik sağlayıcıları, fakat sonra kaybederim basit veritabanı tablolar, token üsleri onay ve kurtarma, daha güvenli parola karma ve daha da önemlisi harici giriş üzerinden OAuth.

Kod ve jilet manzarası içinde işe yarayan tek şey

User.IsInRole("admin")

menü öğeleri için TAMAM gibi, ama ver denetleyicisi her Eylem içinde uygulamak için hantal ve tek bir anda tek bir rol için testleri sevmiyorum).

Büyük ölçüde bu sorun resovle için herhangi bir yardım edersen memnun olurum.

CEVAP
4 EYLÜL 2012, Salı


Buldum bakmak gibi bir cevap here by Mehdi Golchin:

[Authorize(Roles="admin,editor,publisher")]

Ben de eve denetleyici için bunu ekleyin

 [InitializeSimpleMembership]

Bu öznitelik Hesapları denetleyicisinde çünkü, SimpleMembership veritabanı sadece giriş/kayıt gibi hesapları kontrol cihazının ilk kullanımından sonra başlatmak alır. Geçerli kullanıcı çerez açmış olsa da, veritabanı başlatılan ve bir hata atar. Bir çözüm buldum benim web Sitesi başlatmak zaman çağrılan eve denetleyicisinde bu öznitelik koymaktır. Ama, rolleri kontrol ediyorum çünkü her denetleyici yerleştirilmiş olmalı ve farklı menü öğeleri rol tabanlı görüntü.

Bu veritabanı ilk kullanıldığında App_Start ve başlatılması gibi kötü tasarım.

Koymaya çalıştım

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

bu Global.asax Application_Start()gereken bakım rolü kontrol menü öğelerini kullanma User.IsInRole("admin") ama sonra atmak hata herhangi bir kumanda ile [Authorize(Roles="admin")] öznitelik, hatta ek özellik [InitializeSimpleMembership] uygulanır.

Yani şu anda çözüm bir kullanıcı başlangıçta herhangi bir sayfa harici bağlantıları kullanarak kara Mayıs " olarak[İnitializeSimpleMembership] tüm kontrolörler yaptı.

Hala rol yönetimi yerine User.IsInRole() sadece daha fazla SimpleRolesProvider sınıf başlatmak için nasıl bir açıklaması yok.

Bu işleri çok daha iyi algılayıcıya web sitesi iş ve liman ot MVC tam değildir açıkçası. Bu çatışmalar ve varsayılan ASP.NET üyelik sağlayıcıları ile kafası karışır.

EDİT TAMAM [InitializeSimpleMembership] filtre genel FilterConfig.cs App_Start klasöründe bu çizgi koyarak uygulanabilir düşünüyordum:

filters.Add(new InitializeSimpleMembershipAttribute());

O bu sorunu halleder. Şimdi SimpleRolesProvider başlatma için bir çözüm lazım yoksa kendi rollerini sağlayıcım yazmak zorunda kalacağım.

GÜNCELLEME:

post by Scott Allen Bu benim tüm sorunlarımı çözdü.

Web bu da dahil.config:

<roleManager enabled="true" defaultProvider="simple">
  <providers>
    <clear/>
    <add name="simple" type="WebMatrix.WebData.SimpleRoleProvider,               WebMatrix.WebData"/>
  </providers>      
</roleManager>
<membership defaultProvider="simple">
  <providers>
    <clear/>
    <add name="simple" type="WebMatrix.WebData.SimpleMembershipProvider,                          WebMatrix.WebData"/>
  </providers>
</membership>

Roller ve Üyelik sınıflar tüm yöntemleri kullanılabilir ve aşağıdaki gibi kod başlatılabilir

var roles = (SimpleRoleProvider) Roles.Provider;
var membership = (SimpleMembershipProvider) Membership.Provider;

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • metagamers

    metagamers

    13 Mayıs 2006
  • metallmanutza13

    metallmanutz

    13 NİSAN 2007
  • Shylo Sharity

    Shylo Sharit

    27 EKİM 2011