2014-05-22 6 views
0

System.ComponentModel.DataAnnotations.AuthorizationAttribute에서 파생 된 사용자 지정 특성을 만들고 IsAuthorized 메서드를 재정의했습니다.AuthorizationAttribute IsAuthorized가 호출되지 않았습니다.

새 특성으로 메서드를 장식했지만 IsAuthorized 메서드가 호출되지 않습니다. 왜 그 이유를 설명 할 수 있습니까? 여기

[AttributeUsage(AttributeTargets.All)] 
public class AuthorisationAttribute : System.ComponentModel.DataAnnotations.AuthorizationAttribute 
{ 
    private bool IsAuthorised { get; set; } 

    public AuthorisationAttribute(bool isAuthorised) 
    { 
     IsAuthorised = isAuthorised; 
    } 


    protected override AuthorizationResult IsAuthorized(IPrincipal principal, AuthorizationContext authorizationContext) 
    { 
     return IsAuthorised ? AuthorizationResult.Allowed : new AuthorizationResult("You are not authorised for this activity"); 
    } 
} 

내 사용이다 : 사전에

public partial class Form1 : Form 
{   
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    [Authorisation(true)] 
    private void button1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Pass"); 
    } 

    [Authorisation(false)] 
    private void button2_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Shouldn't see this"); 
    } 
} 

덕분에

여기 내 속성 선언입니다.

답변

2

매우 예외는 속성이 주입 지점이 아닙니다. 그들은 을 전혀하지 않으며, 그들 자신이입니다. 그들은 메타 데이터 (유형/회원 정보)입니다. 이들이 활성이되도록하려면 리플렉션을 통해이를 명시 적으로 확인하고 모든 메소드를 호출하는 호출 프레임 워크가 필요합니다.

일부 지역의 경우입니다. 예를 들어, MVC는 속성을 광범위하게 사용합니다. 그러나 이것은 winform 이벤트 처리기 및 기타 임의의 메서드에는 해당되지 않습니다. 그래서 아무 일도 일어나지 않습니다.

기본적으로 문에 "들어 가지 마십시오"라는 스티커 라벨을 넣는 것과 동일하지만 아무도 기본적으로 볼 수없는 장소 (예 : 문 상단)에 수행했습니다. 경우에만 무언가를 (모두) :

  • 누군가가 라벨을 찾습니다
  • 명 중 하나 electively 라벨을 순종하거나 IN/OUT
  • 가는 사람들에 대한 라벨을 확인하는 명시 적 문 - 사람이
+0

내가이 게시물을 작성하기 전에 나는 꽤 많이 봤어.하지만 내 코드가 내가 예상했던대로하지 못하는 이유를 이해하는 데 도움이되는 '스티커 라벨'유추였다. 고마워. 마크. 이제 MVC를 사용하지 않거나 CAS를 사용하지 않고 문 - 사람을 구현하는 방법을 알아야합니다. 누군가 손으로 코드 샘플을 제공하면 크게 감사하게 될 것입니다. – lee

관련 문제