0

인증 된 특정 사용자 만 내 컨트롤러 내의 특정 작업에 액세스 할 수 있도록 허용함으로써 MVC 5 애플리케이션을 잠급니다. 나는 로그인 후에 액세스 권한을 얻고 자하는 사용자 만 허용하는 클래스 상단의 authorize 특성을 사용합니다. 내 수업의 상단에 배치 된 다음 속성으로이 작업을 수행합니다 ...어떻게 [Authorize] 속성을보다 유연하게 만들 수 있습니까?

[Authorize(Users="user1,user2")] 

위대한 작품입니다! 그러나이 특정 컨트롤러에 새 사용자를 추가 할 때마다 응용 프로그램을 다시 컴파일하고 배포하지 않으려면 어떻게해야합니까?

내가 이렇게 같은 키로 아래에 내 web.config 파일이 추가 거라고 생각

...

<appSettings> 
    <add users="user1,user2"/> 
</appSettings> 

그러나 나는 그렇게처럼 내 컨트롤러에서이 키에 액세스 할 때 : [권한 부여 (사용자 = ConfigurationManager.AppSettings [ "users"])] 오류가 발생합니다 : 'AppSettings'기호를 확인할 수 없습니다.

이 방법이 있습니까?

답변

1

왜 대답이 이 아니 었는지 확실하지 않습니다. 질문이 접수되었습니다. 어쨌든, 미래의 여행자들에게 답을 줄 가치가 있다고 생각했습니다.

이 기능은 기본적으로 제공되지 않지만 직접 권한 부여 특성을 작성하면 가능합니다.

public class ConfigAuthorize : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var allowedUsers = ConfigurationManager.AppSettings["CoolActionAllowedUsers"]; 
     var allowedUsersArray = allowedUsers.Split(','); 

     if (httpContext.User.Identity != null && allowedUsersArray.Contains(httpContext.User.Identity.Name)) 
     { 
      return true; 
     } 

     return false; 
    } 
} 

그리고 속성 사용하기 :

[ConfigAuthorize] 
public ActionResult CoolAction() { 
    //... 
} 

권한 부여가 AuthorizeCore에서 수행되는 경우 위의 코드에서이 CoolActionAllowedUsers에서 구성 값이 메모리에 들어갔습니다되고 현재 인증 된 사용자가 확인됩니다 사용자가 허용 된 사용자 목록에있는 경우 구성 파일을 변경하면 문제가되지 않습니다. 응용 프로그램 풀이 자동으로 다시 시작되고 다음 번에 코드를 실행하여 새 값을 읽을 config 파일을 읽습니다.

@Shoe와 완전히 동의합니다. 역할은 사용해야합니다. 코드에서 사용자 목록을 관리하는 것은 엉망입니다. 사실, 직장에서 언제든지 한 명의 임의 사용자가 페이지에 액세스 할 수 있도록 요청할 때마다 그룹을 설정해야합니다. 그러나 위의 코드는 역할 목록에도 적용될 수 있습니다.

+0

답변을 주셔서 감사합니다, 이것은 실제로 내 질문에 대한 답변입니다. 나는 신발이 모범 사례로 제시된 권장 사항에 100 % 동의합니다. 내가 Stackoverflow에서 종종 보는 것은 사용자가 실제로 요구하는 것을 감추고있는 응답자의 의견입니다.우리 모두는 자신의 의견을 소유 할 권리가 있지만, 누군가가 어떻게해야하는지에 대한 질문을하는 합법적 인 이유가 종종 있습니다. 그것이 말하게되면서, 나는 당신에게 당신의 각각의 응답을위한 양쪽 소품을 줬다. – user2146538

+0

내 대답은 필요한 것이 무엇인지를 알려주는 것이 었습니다. "둥근 구멍에 사각형의 못을 어떻게 끼워 넣을 수 있습니까?"라는 질문에 더 잘 맞는 대답입니다. 분명히 "둥근 것을 사용하지 말고, 둥근 것을 사용하십시오."대신에 톱을 가져다가 말뚝을 자르고, 말뚝을 모래에 담그고, 다시 칠하고, 그 후에 꼭 맞아야합니다. 이 답변은 확실하게 질문에 답합니다. 왜 '롤 (Roles)'을 단순히 사용하게 될지 모르겠습니다. – Shoe

1

Users 매개 변수를 사용하는 대신 Roles 매개 변수를 사용하십시오.

[Authorize(Roles="CanExecuteActions")] 

이제 사용자에게 컨트롤러에 대한 액세스 권한을 부여하여이 역할을 부여 할 수 있습니다. 역할이없는 사용자는 컨트롤러의 작업을 실행할 수 없습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 이미 그 일을하는 법을 알고있었습니다. 내가 정말로 알고 싶었던 것은 질문에서 묻는대로 할 수 있지만 대답을위한 소품을주고 '아니오, 할 수 없다'라고 생각합니다. – user2146538

+0

예 users 매개 변수가 실제로 유용하거나 확장 가능하지는 않습니다. 특별한 역할을 통해 장기적으로 많은 두통을 줄일 수 있습니다. – Shoe

관련 문제