2010-04-09 3 views
0

시스템의 복잡성이 높아짐에 따라 데이터베이스에서 클라이언트에 연결된 사용 권한 이름을보다 구체적으로 지정해야합니다. 클라이언트에서는 많은 클라이언트 기능이 각 사용자의 권한에 따라 다르며 역할에 다양성이 있기 때문에 권한은 정적 클래스에서 참조됩니다. 예를 들어 this post을 참조했지만 더 구체적인 사용 사례를 찾고 있습니다. 예를 PermissionAlpha는 const를 문자열 것이 참조를 위해 가지고 :클래스 이름 계층 구조를 문자열로 검색합니다.

public static class PermissionNames 
{ 
    public static class PermissionAlpha 
    { 
     public const string SubPermission = "PermissionAlpha.SubPermission"; 
    } 
} 

내가 '지금 상황이 클래스는 다음과 같이 구성되고 더 복잡한 성장 점을 제외하고 중대하다

return HasPermission(PermissionNames.PermissionAlpha); 

이 새로운 설정에서 위의 첫 번째 선언과 비슷한 역할을하는 PermissionAlpha를 쉽게 참조 할 수있는 방법을 찾으려고합니다. 이 작업을 수행하는 유일한 방법은 아래 예제와 같이 클래스 이름의 값을 가져 오는 것입니다. 한 곳에서 모든 이름을 응용 프로그램의 아무 곳이나 참조 할 수 있도록 유지하려고합니다.

public static class PermissionAlpha 
{ 
    public static string Name { get { return typeof(PermissionAlpha).Name; } } 
} 

** 편집 ** - 누락 된 권한 이름을 추가했습니다.

답변

0

이 프로젝트의 크기에 당신을위한 변화의 너무 큰 것입니다,하지만 우리는 모든이 우리의 비즈니스 객체는 부분 클래스로 분리됩니다. 하나는 수동 변경이며 하나는 생성됩니다. 코드 생성 중에 우리는 "단일 소스의 진실"에서 부분 클래스의 생성 된면에 사용 권한 키를 씁니다. 우리는 생성하기 위해 진실 및 CodeDom의 근원지로 클래스 세트를 사용하지만 데이터베이스를 소스로 사용하고 T4, CodeSmith 또는 기타를 사용하여 생성 할 수도 있습니다.

+0

저는이 특별한 변화가 시간 제약으로 인해 다소 어려울 것이라고 생각합니다. 그러나 우리는 곧 실버 라이트로 곧 언젠가는 포팅하기를 바라고 있습니다. 이것은 분명히 고려해야 할 것이 될 것입니다. 이것이 어떻게 설정 될지에 대한 예가 있습니까? 개념화하기가 약간 어렵습니다. –

+0

나는 좀 더 연구를하고 나서 이것을 받아 들일 것이다. 이 모델로 전환하는 것이 앞으로 나아갈 좋은 방법 인 것처럼 보입니다. 감사! –

+0

쿨! 일단 코드 생성을 시작하면 결코 돌아 가지 않을 것입니다. – adam0101

0

문제의 클래스에 반사 가능한 속성을 생성하지 않는 이유는 무엇입니까? 그렇게하면 필요한 모든 추가 정보를 추가 할 수 있습니다. 나는 자격이 내 블로그 기사에 속성을 치는의 방법 제공 :

C# Using Extended Attribute Information on Objects

HTH 어쩌면

+0

저는 이것을 고려했습니다. 실제로 Enums라는 코드의 다른 예제에서이 작업을 수행합니다. XAML에서 많은 ValueConverters를 사용하지 않고 각 위치에서 GetDescriptionAttibute()를 참조하고 참조하는 것을 피하기 위해 클래스 이름을 참조하기를 바랍니다. 사용 권한을 참조해야합니다 (Enum보다 훨씬 일반적입니다). –

관련 문제