역할 관리자 기능이 활성화되지 않았습니다


192

다음 ProviderException이 있습니다 .

역할 관리자 기능이 활성화되지 않았습니다.

여태까지는 그런대로 잘됐다.

역할 관리자의 활성화 여부를 확인하기 위해 호출 할 수있는 방법이 있습니까?

답변:


302

다음의 boolean 속성을 읽어이 작업을 수행 할 수 있습니다.

System.Web.Security.Roles.Enabled

이것은 다음 enabledroleManager요소 속성 에서 직접 읽습니다 web.config.

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


업데이트 :
자세한 내용은 다음 MSDN 샘플을 참조하십시오 : https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx


1
대신 코드에서 어떻게 할 수 web.config있습니까? 나는 그것을 넣어 보았습니다Application_StartThis method can only be called during the application's pre-start initialization phase.
Maslow

1
이것은 web.config에서 어디로 갑니까?
매트 코놀리

17
위의 web.config에 추가하면 roleManager 활성화됩니다. 그러나 지금 나는 예외를 받고있다Unable to connect to SQL Server database
Irfan Yusanif

2
@Infotekka "SQL Server 데이터베이스에 연결할 수 없습니다"오류.
Jack

2
와우, 이것은 훌륭한 답변입니다. 아무 것도 구성 할 필요가 없으며 단지 매력처럼 작동합니다. web.config에서 구성되면 User.Identity.IsAuthenticated를 확인하여 로그인 사용자가 인증되었는지 확인할 수 있습니다. 멋진 asp.net
Quan

52

new를 사용하고 있기 때문에 여기에 있다면 ASP.NET Identity UserManager실제로 찾고있는 것은 RoleManager:

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

roleManager 역할이 존재하는지, 작성 등을 확인할 수있는 액세스 권한을 제공하며 UserManager


73
3 살은 어떤 것과 관련이 있습니까? ID 설정 문제를 처리하고 있었기 때문에 Google에서이 게시물로 이동했습니다. 내가 알아 낸 이후로 ... 구글에 의해 여기에 데려온 나와 같은 문제를 다루는 다음 사람은 무엇을 해야할지 알게 될 것입니다 ...
Serj Sagan

1
또한 Identity UserManager에는 지정된 사용자의 역할을 가져 오는 유용한 기능이 있습니다. UserManager.GetRolesAsync (User.Identity.GetUserId ());
keithl8041

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

앱의 어느 곳에서나 할 수 있습니다. 분명히 일부 참조를 해결해야하지만 Identity 앱에서 역할이 필요한 모든 위치에서이 명령문을 사용할 수 있습니다.
Serj Sagan

11

a) 귀하의 db 연결 문자열 (역할이 사용하는 문자열)이 올바른지 확인하고 철자가 올바른지 확인하고 b) RoleManager의 Enabled 플래그가 true로 설정되어 있는지 제안하는 다른 곳에서 2 가지 제안을 찾았습니다. 그 중 하나가 도움이 되길 바랍니다. 그것은 나를 위해했다.

Roles.Enabled를 확인하려고 했습니까? 또한 Roles.Providers를 확인하여 사용 가능한 공급자 수를 확인하고 기본 공급자에 대한 Roles.Provider를 확인할 수 있습니다. null 인 경우는 없습니다.


답변 주셔서 감사합니다. 그러나 그것은 내가 원하는 것이 아닙니다. 그 목적으로 ProviderException을 캐싱하지 않고 역할 관리자 기능이 활성화되어 있는지 여부를 확인하는 방법을 원합니다.
gsharp

8

언급 된 예외로 인해이 질문을 발견했습니다. 내 Web.Config에 <roleManager>태그 가 없습니다 . Infotekka가 제안한 대로 추가하더라도 데이터베이스 예외로 끝났다는 것을 깨달았 습니다. 여기에있는 다른 답변의 제안을 따른 후에도 문제를 완전히 해결 한 사람은 없습니다.

이러한 Web.Config 태그는 자동으로 생성 될 수 있기 때문에 수동으로 추가하면 문제를 해결하는 것이 잘못되었습니다. 비슷한 경우 Web.Config 및 Visual Studio에서 변경 한 내용을 모두 실행 취소하십시오.

  1. 를 눌러 Ctrl+ Q입력 nuget "NuGet 패키지 관리"를 클릭;
  2. Ctrl+를 누르고 공급자를E 입력 하면 목록에 "Microsoft ASP.NET Universal Providers Core Libraries "및 " LocalDB 용 Microsoft ASP.NET Universal Providers "(모두 Microsoft에서 생성)가 표시됩니다.
  3. 둘 다에서 설치 단추를 클릭하고 NuGet 창을 닫으십시오.
  4. 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>
    
  5. enabled="true"이렇게 추가하십시오 :

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
  6. F6빌드하려면 누르 십시오. 이제 예외없이 데이터베이스 업데이트를 진행해도됩니다.

    1. 를 눌러 Ctrl+ Q입력 매니저 , "패키지 관리자 콘솔"을 클릭;
    2. Type update-database -verbose및 Seed 메서드는 제대로 실행되고 (다른 곳을 엉망으로 만들지 않은 경우) 데이터베이스에 몇 개의 테이블을 만듭니다.
    3. 를 눌러 Ctrl+ W+ L서버 탐색기를 엽니 다 당신이 체크인 할 수 있어야합니다 데이터 연결> DefaultConnection> 테이블 역할UsersInRoles의 새로 만든 테이블 간의 테이블!

1
" Web.Config 필드가 자동으로 생성되므로 "완전히 올바르지 않습니다. 많은 NuGet 패키지가 구성 파일을 자동으로 조정하지만 그렇게해야하는 정해진 규칙은 없습니다.
Kevin R.

이것은 완벽 해요. Thnx
sapatelbaps

6

사용하는 경우 다음 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>());

이것은 나를 위해 일했습니다. 투표를 거부 한 이유를 말씀해주십시오.
Ogglas

사용자 ID를 int로 캐스트해야하기 때문에 작동하지 않습니다. userManager.GetRoles (Convert.ToInt32 (User.Identity.GetUserId <int> ()));
장난감

@toy 아니요, <int>는 값을 int로 가져옵니다. 변환 할 필요가 없습니다. 물론 이것이 작동하려면 Identity 키가 int이어야합니다.
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

다음은 사용자 역할 목록을 가져 오기 위해 MVC5 이상의 계정 컨트롤러에 입력해야하는 코드입니다.

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

Roles.GetRolesForUser()역할 관리자 기능 을 사용 하거나 활성화 할 필요가 없습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.