[C#] 역할 관리자 기능이 활성화되지 않았습니다
역할 관리자 기능이 활성화되지 않았습니다.
여태까지는 그런대로 잘됐다.
역할 관리자의 활성화 여부를 확인하기 위해 호출 할 수있는 방법이 있습니까?
답변
다음의 boolean 속성을 읽어이 작업을 수행 할 수 있습니다.
System.Web.Security.Roles.Enabled
이것은 다음 enabled
의 roleManager
요소 속성 에서 직접 읽습니다 web.config
.
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
업데이트 :
자세한 내용은 다음 MSDN 샘플을 참조하십시오 : https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
답변
new를 사용하고 있기 때문에 여기에 있다면 ASP.NET
Identity
UserManager
실제로 찾고있는 것은 RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
역할이 존재하는지, 작성 등을 확인할 수있는 액세스 권한을 제공하며 UserManager
답변
a) 귀하의 db 연결 문자열 (역할이 사용하는 문자열)이 올바른지 확인하고 철자가 올바른지 확인하고 b) RoleManager의 Enabled 플래그가 true로 설정되어 있는지 제안하는 다른 곳에서 2 가지 제안을 찾았습니다. 그 중 하나가 도움이 되길 바랍니다. 그것은 나를 위해했다.
Roles.Enabled를 확인하려고 했습니까? 또한 Roles.Providers를 확인하여 사용 가능한 공급자 수를 확인하고 기본 공급자에 대한 Roles.Provider를 확인할 수 있습니다. null 인 경우는 없습니다.
답변
언급 된 예외로 인해이 질문을 발견했습니다. 내 Web.Config에 <roleManager>
태그 가 없습니다 . Infotekka가 제안한 대로 추가하더라도 데이터베이스 예외로 끝났다는 것을 깨달았 습니다. 여기에있는 다른 답변의 제안을 따른 후에도 문제를 완전히 해결 한 사람은 없습니다.
이러한 Web.Config 태그는 자동으로 생성 될 수 있기 때문에 수동으로 추가하면 문제를 해결하는 것이 잘못되었습니다. 비슷한 경우 Web.Config 및 Visual Studio에서 변경 한 내용을 모두 실행 취소하십시오.
- 를 눌러 Ctrl+ Q입력 nuget “NuGet 패키지 관리”를 클릭;
- Ctrl+를 누르고 공급자를E 입력 하면 목록에 “Microsoft ASP.NET Universal Providers Core Libraries “및 ” LocalDB 용 Microsoft ASP.NET Universal Providers “(모두 Microsoft에서 생성)가 표시됩니다.
- 둘 다에서 설치 단추를 클릭하고 NuGet 창을 닫으십시오.
-
Web.config를 확인하면 이제 Profile , Membership , SessionState 태그 안에 새 RoleManager 태그 안에 하나 이상의
<providers>
태그 가 있어야 합니다.<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>
-
enabled="true"
이렇게 추가하십시오 :<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
-
F6빌드하려면 누르 십시오. 이제 예외없이 데이터베이스 업데이트를 진행해도됩니다.
- 를 눌러 Ctrl+ Q입력 매니저 , “패키지 관리자 콘솔”을 클릭;
- Type
update-database -verbose
및 Seed 메서드는 제대로 실행되고 (다른 곳을 엉망으로 만들지 않은 경우) 데이터베이스에 몇 개의 테이블을 만듭니다. - 를 눌러 Ctrl+ W+ L서버 탐색기를 엽니 다 당신이 체크인 할 수 있어야합니다 데이터 연결> DefaultConnection> 테이블 역할 및 UsersInRoles의 새로 만든 테이블 간의 테이블!
답변
사용하는 경우 다음 ASP.NET Identity UserManager
과 같이 얻을 수 있습니다.
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
예를 들어 사용자의 키를 Guid에서 Int로 변경 한 경우 다음 코드를 사용하십시오.
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>
답변
다음은 사용자 역할 목록을 가져 오기 위해 MVC5 이상의 계정 컨트롤러에 입력해야하는 코드입니다.
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Roles.GetRolesForUser()
역할 관리자 기능 을 사용 하거나 활성화 할 필요가 없습니다 .