Có Nhà cung cấp ngoại lệ sau :
Tính năng Trình quản lý vai trò chưa được bật.
Càng xa càng tốt.
Có nơi nào đó một phương thức có thể được gọi để kiểm tra xem Trình quản lý vai trò đã được bật hay chưa?
Có Nhà cung cấp ngoại lệ sau :
Tính năng Trình quản lý vai trò chưa được bật.
Càng xa càng tốt.
Có nơi nào đó một phương thức có thể được gọi để kiểm tra xem Trình quản lý vai trò đã được bật hay chưa?
Câu trả lời:
Bạn có thể làm điều này bằng cách đọc từ thuộc tính boolean tại:
System.Web.Security.Roles.Enabled
Đây là phần đọc trực tiếp từ enabled
thuộc tính của roleManager
phần tử trong web.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Cập nhật:
Để biết thêm thông tin, hãy xem mẫu MSDN này: https://msdn.microsoft.com/en-us/l Library / aa354509 (v = vs.110) .aspx
roleManager
được bật. Nhưng bây giờ tôi đang có ngoại lệUnable to connect to SQL Server database
Nếu bạn đến đây vì bạn đang sử dụng cái mới ASP.NET
Identity
UserManager
, cái bạn thực sự đang tìm kiếm là RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
sẽ cung cấp cho bạn quyền truy cập để xem vai trò có tồn tại, tạo, v.v., cộng với vai trò đó được tạo cho UserManager
Tôi đã tìm thấy 2 đề xuất ở nơi khác thông qua Google gợi ý a) đảm bảo chuỗi kết nối db của bạn (chuỗi mà Roles đang sử dụng) là chính xác và khóa cho nó được viết đúng chính tả và b) rằng cờ Kích hoạt trên Vai trò quản lý được đặt thành đúng. Hy vọng một trong những giúp đỡ. Nó đã làm cho tôi.
Bạn đã thử kiểm tra Roles.Enables chưa? Ngoài ra, bạn có thể kiểm tra Roles.Providers để xem có bao nhiêu nhà cung cấp khả dụng và bạn có thể kiểm tra Roles.Provider cho nhà cung cấp mặc định. Nếu nó là null thì không có.
Tôi tìm thấy câu hỏi này do ngoại lệ được đề cập trong đó. Web.Config của tôi không có bất kỳ <roleManager>
thẻ nào . Tôi nhận ra rằng ngay cả khi tôi thêm nó (như Infotekka đã đề xuất ), nó đã kết thúc trong một ngoại lệ Cơ sở dữ liệu. Sau khi làm theo các gợi ý trong các câu trả lời khác ở đây, không ai giải quyết được hoàn toàn vấn đề.
Vì các thẻ Web.Config này có thể được tạo tự động, nên cảm thấy sai khi giải quyết nó bằng cách thêm chúng theo cách thủ công. Nếu bạn ở trong trường hợp tương tự, hãy hoàn tác tất cả các thay đổi bạn đã thực hiện đối với Web.Config và trong Visual Studio:
Kiểm tra Web.config của bạn và bây giờ bạn sẽ có ít nhất một <providers>
thẻ bên trong các thẻ Hồ sơ , Thành viên , SessionState và bên trong thẻ Vai trò quản lý mới , như thế này:
<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>
Thêm enabled="true"
như vậy:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Nhấn F6để xây dựng và bây giờ sẽ ổn để tiến hành cập nhật cơ sở dữ liệu mà không có ngoại lệ đó:
update-database -verbose
và phương thức Seed sẽ chạy tốt (nếu bạn không bị rối ở nơi khác) và tạo một vài bảng trong Cơ sở dữ liệu của bạn;Nếu bạn đang sử dụng ASP.NET Identity UserManager
bạn cũng có thể có được nó như thế này:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Nếu bạn đã thay đổi khóa cho người dùng từ Guid sang Int chẳng hạn, hãy sử dụng mã này:
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>
Đây là mã mà bạn cần đặt trong Trình điều khiển tài khoản của mình trong MVC5 và sau đó để có danh sách vai trò của người dùng:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Không cần sử dụng Roles.GetRolesForUser()
và kích hoạt Tính năng Trình quản lý Vai trò.
web.config
? Tôi đã thử đặt nó vàoApplication_Start
và nó nóiThis method can only be called during the application's pre-start initialization phase.