Rol Yöneticisi özelliği etkinleştirilmedi


192

Aşağıdaki ProviderException var :

Rol Yöneticisi özelliği etkinleştirilmedi.

Çok uzak çok iyi.

Rol Yöneticisi'nin etkinleştirilip etkinleştirilmediğini kontrol etmek için çağrılabilecek bir yöntem var mı?

Yanıtlar:


302

Bunu şu adresteki boole özelliğinden okuyarak yapabilirsiniz:

System.Web.Security.Roles.Enabled

Bu doğrudan bir okuma olduğu enabledoznıtelığı roleManageriçinde unsuru web.config:

<configuration>
  <system.web>
    <roleManager enabled="true" />
  </system.web>
</configuration>


Güncelleme:
Daha fazla bilgi için şu MSDN örneğine göz atın: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx


1
bunun yerine koddan nasıl yapabilirim web.config? Takmayı denedim Application_Startve diyorThis method can only be called during the application's pre-start initialization phase.
Maslow

1
Bu web.config içinde nereye gidiyor?
Matt Connolly

17
Yukarıda web.config dosyasına eklendikten sonra roleManager etkinleştirilir. Ama şimdi istisna alıyorumUnable to connect to SQL Server database
Irfan Yusanif

2
@Infotekka "SQL Server veritabanına bağlanılamıyor" hatası.
Jack

2
vay, bu harika bir cevap, hiçbir şey yapılandırmam bile gerekmiyor, sadece bir cazibe gibi çalışıyor. Web.config içinde yapılandırıldıktan sonra, sadece bir giriş kullanıcısının kimliğinin doğrulanıp onaylanmadığını görmek için User.Identity.IsAuthenticated kontrol edebilirim. Çok havalı asp.net
Quan

52

Eğer buraya yenisini kullandığınız için ASP.NET Identity UserManagergeldiyseniz, aslında aradığınız şey RoleManager:

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

roleManager rolün var olup olmadığını, oluşturmayı, vb. UserManager


73
3 yaşındaki çocuğun herhangi bir şeyle ne ilgisi var? Identity'yi kurarken bir sorunla uğraştığım için Google'dan bu gönderiye yönlendirildim. Anladığımdan beri ... Google tarafından buraya getirilen benimle aynı sorunu ele alan bir sonraki kişi ne yapacağını bilecek ...
Serj Sagan

1
Ayrıca, UserManager Kimliği, belirtilen kullanıcı için roller almak için kullanışlı bir özelliğe sahiptir: UserManager.GetRolesAsync (User.Identity.GetUserId ());
keithl8041

Var roleManager = new RoleManager <IdentityRole> (yeni RoleStore <IdentityRole> (new ApplicationDbContext ())) nereye koyarsınız; ?
Mario M

Uygulamanın herhangi bir yerinde yapabilirsiniz. Açıkçası bazı referansları çözmeniz gerekecek, ancak bir Kimlik uygulamasında rollere ihtiyaç duyduğunuz her yerde bu ifadeyi kullanabilirsiniz.
Serj Sagan

11

Google'da başka bir yerde, a) db connectionstring'inizin (Rol'lerin kullandığı) doğru olduğundan ve anahtarın doğru yazıldığından ve b) RoleManager'da Etkin bayrağının true olarak ayarlandığından emin olan başka bir yerde 2 öneri buldum. Umarım bunlardan biri yardımcı olur. Benim için oldu.

Rolleri kontrol etmeyi denediniz mi? Etkin mi? Ayrıca, kaç sağlayıcı bulunduğunu görmek için Roles.Providers'ı ve varsayılan sağlayıcı için Roles.Provider'ı kontrol edebilirsiniz. Eğer boşsa, o zaman kimse yoktur.


Cevabınız için teşekkürler. Ama istediğim bu değil. Bu amaç için ProviderException önbelleğe almadan, Rol Yöneticisi özelliğinin etkin olup olmadığını denetleyen bir yöntem istiyorum.
gsharp

8

Bu soruyu, içinde belirtilen istisna nedeniyle buldum. Web.Config öğemin <roleManager>etiketi yok. ( Infotekka'nın önerdiği gibi) eklesem bile , bir Veritabanı istisnasıyla sonuçlandığını fark ettim . Buradaki diğer cevaplardaki önerileri izledikten sonra, hiçbiri sorunu tam olarak çözmedi.

Bu Web.Config etiketleri otomatik olarak oluşturulabildiğinden, bunları manuel olarak ekleyerek çözmek yanlış hissetti. Benzer bir durumdaysanız, Web.Config ve Visual Studio'da yaptığınız tüm değişiklikleri geri alın:

  1. Ctrl+ Tuşuna basın Q, nuget yazın ve " NuGet Paketlerini Yönet" e tıklayın;
  2. Ctrl+ Tuşlarına basın E, sağlayıcıları yazın ve listede "Microsoft ASP.NET Evrensel Sağlayıcıları Temel Kitaplıkları " ve " LocalDB için Microsoft ASP.NET Evrensel Sağlayıcıları " (her ikisi de Microsoft tarafından oluşturulmuş) göstermelidir;
  3. Her ikisinde de Yükle düğmesine tıklayın ve NuGet penceresini kapatın;
  4. Web.config dosyanızı kontrol edin ve şimdi Profil , Üyelik , SessionState etiketlerinin içinde ve ayrıca yeni RoleManager etiketinin içinde en az bir <providers>etiketinizin olması gerekir :

    <roleManager defaultProvider="DefaultRoleProvider">
        <providers>
           <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" />
        </providers>
    </roleManager>
  5. Şöyle ekleyin enabled="true":

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
  6. F6Oluşturmak için basın ve şimdi bir istisna olmadan bir veritabanı güncellemesine ilerlemek için Tamam olmalıdır:

    1. Ctrl+ Tuşuna basın Q, yönetici yazın , "Paket Yöneticisi Konsolu" na tıklayın;
    2. Tür update-database -verboseve Tohum yöntemi iyi çalışır (başka bir yere bulaşmadıysanız) ve Veritabanınızda birkaç tablo oluşturun;
    3. Basın Ctrl+ W+ LSunucu Explorer'ı açmak için ve check gerekir Veri Bağlantılar> DefaultConnection> Tablolar Roller ve UsersInRoles yeni oluşturulan tablolar arasında tablolar!

1
" Web.Config alanları otomatik olarak oluşturulduğundan " Bu tamamen doğru değil. Birçok NuGet paketi yapılandırma dosyalarını otomatik olarak ayarlasa da, bunları yapmasını gerektiren bir kural yoktur.
Kevin

Bu harika. Thnx
sapatelbaps

6

Eğer kullanıyorsanız ASP.NET Identity UserManagerbu şekilde de alabilirsiniz:

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

var roles = userManager.GetRoles(User.Identity.GetUserId());

Örneğin, kullanıcı anahtarını Guid'den Int'ye değiştirdiyseniz, bu kodu kullanın:

var roles = userManager.GetRoles(User.Identity.GetUserId<int>());

Bu benim için çalıştı. Lütfen oy vermiyorsanız nedenini söyleyin.
Ogglas

bu, int kullanıcı kimliğini kullanmanız gerektiği için çalışmaz: userManager.GetRoles (Convert.ToInt32 (User.Identity.GetUserId <int> ()));
oyuncak

@toy Hayır, <int> değeri int olarak alır. Dönüştürmeye gerek yok. Elbette bunun çalışması için Kimlik anahtarının int olması gerekir.
Ogglas

-1
<roleManager
  enabled="true"
  cacheRolesInCookie="false"
  cookieName=".ASPXROLES"
  cookieTimeout="30"
  cookiePath="/"
  cookieRequireSSL="false"
  cookieSlidingExpiration="true"
  cookieProtection="All"
  defaultProvider="AspNetSqlRoleProvider"
  createPersistentCookie="false"
  maxCachedResults="25">
  <providers>
    <clear />
    <add
       connectionStringName="MembershipConnection"
       applicationName="Mvc3"
       name="AspNetSqlRoleProvider"
       type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <add
       applicationName="Mvc3"
       name="AspNetWindowsTokenRoleProvider"
       type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>

-1

Bir kullanıcının rollerinin listesini almak için MVC5 ve sonraki sürümlerde Hesap Denetleyicinize eklemeniz gereken kod şunlardır:

csharp public async Task<ActionResult> RoleAdd(string UserID) { return View(await UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList()); }

Roles.GetRolesForUser()Rol Yöneticisi Özelliğini kullanmaya ve etkinleştirmeye gerek yoktur .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.