Dapatkan ProviderException berikut :
Fitur Manajer Peran belum diaktifkan.
Sejauh ini baik.
Apakah ada metode yang dapat dipanggil untuk memeriksa apakah Manajer Peran telah diaktifkan atau tidak?
Dapatkan ProviderException berikut :
Fitur Manajer Peran belum diaktifkan.
Sejauh ini baik.
Apakah ada metode yang dapat dipanggil untuk memeriksa apakah Manajer Peran telah diaktifkan atau tidak?
Jawaban:
Anda dapat melakukan ini dengan membaca dari properti boolean di:
System.Web.Security.Roles.Enabled
Ini adalah pembacaan langsung dari enabled
atribut roleManager
elemen di web.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Pembaruan:
Untuk informasi lebih lanjut, lihat contoh MSDN ini: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
roleManager
diaktifkan. Tapi sekarang saya mendapat pengecualianUnable to connect to SQL Server database
Jika Anda sampai di sini karena Anda menggunakan yang baru ASP.NET
Identity
UserManager
, yang sebenarnya Anda cari adalah RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
akan memberi Anda akses untuk melihat apakah peran itu ada, buat, dll, plus peran itu dibuat untuk UserManager
Saya menemukan 2 saran di tempat lain melalui Google yang menyarankan a) memastikan db connectionstring Anda (salah satu yang menggunakan Peran) sudah benar dan bahwa kunci untuk itu dieja dengan benar, dan b) bahwa bendera Diaktifkan pada RoleManager disetel ke true. Semoga salah satu dari itu membantu. Itu untuk saya.
Apakah Anda mencoba memeriksa Peran. Diaktifkan? Juga, Anda dapat memeriksa Peran. Penyedia untuk melihat berapa banyak penyedia yang tersedia dan Anda dapat memeriksa Peran. Penyedia untuk penyedia default. Jika nol maka tidak ada.
Saya menemukan pertanyaan ini karena pengecualian yang disebutkan di dalamnya. Web.Config saya tidak memiliki <roleManager>
tag. Saya menyadari bahwa meskipun saya menambahkannya (seperti yang disarankan Infotekka ), itu berakhir dengan pengecualian Database. Setelah mengikuti saran di jawaban lain di sini, tidak ada yang sepenuhnya menyelesaikan masalah.
Karena tag Web.Config ini dapat dibuat secara otomatis, rasanya salah untuk menyelesaikannya dengan menambahkannya secara manual. Jika Anda berada dalam kasus yang sama, batalkan semua perubahan yang Anda buat ke Web.Config dan di Visual Studio:
Periksa Web.config Anda dan sekarang Anda harus memiliki setidaknya satu <providers>
tag di dalam Profil , Keanggotaan , tag SessionState dan juga di dalam tag RoleManager baru , seperti ini:
<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>
Tambahkan enabled="true"
seperti ini:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Tekan F6untuk Bangun dan sekarang tidak masalah untuk melanjutkan ke pembaruan basis data tanpa pengecualian:
update-database -verbose
dan metode Seed akan berjalan dengan baik (jika Anda belum mengacaukannya di tempat lain) dan membuat beberapa tabel di Database Anda;Jika Anda menggunakan, ASP.NET Identity UserManager
Anda bisa mendapatkannya seperti ini juga:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Jika Anda telah mengubah kunci untuk pengguna dari Guid ke Int misalnya, gunakan kode ini:
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
<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>
Berikut adalah kode yang harus Anda masukkan ke dalam Pengontrol Akun Anda di MVC5 dan kemudian untuk mendapatkan daftar peran pengguna:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Tidak perlu menggunakan Roles.GetRolesForUser()
dan mengaktifkan Fitur Peran Manajer.
web.config
? Saya mencoba memasukkannya ke dalamApplication_Start
dan dikatakanThis method can only be called during the application's pre-start initialization phase.