당신이 다음과 같이 열거 형에 가입 할 수 있도록 다음과 같은 열거 구조비 바이너리 열거 플래그 C#에서
[Flags]
public enum Permission
{
Read = 1 << 1,
Create = 1 << 2,
Update = 1 << 3,
Destroy = 1 << 4
}
찾을 매우 일반적입니다 : Permission.Read|Permission.Create
를 지금 요구 사항의 다른 종류에 직면하고있다에게 , 그리고 내가 생각해 낸 해결책은 문제가되는 IMO 다.
나는 premissions의 여러 유형을 열거 구현의 일종 허용해야 - 몇 가지 모순을, 일부는
하지 않으며 나는 기능
[Flags]
public enum Permission
{
Read1 = 1,
Read2 = 2,
Read3 = 3,
Write1 = 10,
Write2 = 20,
Write3 = 30,
Update1 = 100,
Update2 = 200,
Update3 = 300,
Destory = 1000,
Other = 10000,
SomethingElse = 100000,
}
의 다음과 같은 종류의 할 때이 원 ' t는 Permission.Read1|Permission.Read2
을 의미합니다. 왜냐하면 각 사용자가 각각의 퍼미션에 대해 다른 비트 플래그를 사용하는 것 이외에는 사용자가 이제 읽기 권한 수준 3을 갖기 때문입니다. (이는 내 db가 INT보다 훨씬 더 큰 정수를 유지해야합니다. 나쁜 이유) 또는 사용 권한마다 다른 열거 형 (및 열) (권한에 대한 유연성이 제한됨)을 가지며 컴파일 시간 확인 형식이없는 경우 (일종의 workarroundish 런타임 검증을 생성 할 수 있음) 다른 생각이있어?
다른 권한 유형입니까, 아니면 권한이있는 다른 개체입니까? 즉. Read1은 객체 유형 XXX, YYY의 Read2 및 Read3 ... 등에서 읽 힙니다. – Igor
이 구조는 주로 설명을위한 것입니다. 실제 사용 권한은 Read1..3이 개체 xxx 및 Write1..3이 개체 YYY – gilmishal
에 대한 것과 같이 다른 리소스에 대한 권한 수준을 규제합니다. 그런 다음 구조를 변경해야합니다. 유형 인 경우에는 PermissionFlags','ObjectType' (관계형 데이터베이스의 테이블과 동일, 2 열)의 두 가지 특성이 있습니다. ObjectType은 권한이 적용되는 것입니다. 최대한 포괄적 인 권한을 유지하십시오. 난 당신이 컴파일 타임에 권한의 불법 조합을 잡을 수 있도록 솔루션을 의심, 당신은 런타임 유효성 검사를 만들거나 데이터베이스에 유효성 검사 논리를 추가해야 할 것입니다. – Igor