내 응용 프로그램에서 비슷한 상황이 발생합니다. 이는 플러그인을 통해 확장 할 수 있으며 플러그인은 자체 권한을 가져올 수 있습니다.
- /정적 일반적인
PermissionManager
- 매우 모듈/양식/플러그인 관리자에서 사용 가능한 권한을 등록 할 수있는 "권한 관리자 UI가"가능한 모든 권한을 나열하고을 할 수
- : 나는 다음과 같은 방법으로 해결 관리자는 사용자에게 할당 현재 사용자가 권한이 있는지 모든 모듈/양식/플러그인 관리자를 요청 액세스에
단순화 된 클래스 구조 :
public class PermissionManager
{
public static Dictionary<string, IEnumerable<string>> AvailablePermissions { get; set; }
public static bool? Can(User user, string permission)
{
// check DB
return DENIED ? false : (ALLOWED ? true : null);
}
}
public class MyPlugin : IPlugin
{
public void Init()
{
PermissionManager.AvailablePermissions["MyPlugin"] =
new List<string>() { "Permission1", "Permission2" };
}
public void DoWork()
{
if (PermissionManager.Can(user, "Permission1") != true)
throw new NotAllowedException();
// do work
}
}
이것은 내가 사용하는 기본 패턴입니다. 물론 권한 이름/키에는 상수 또는 유사 항목을 사용해야합니다. 그러면 관리 UI가 구성 UI에서 AvailablePermissions
을 반복 할 수 있습니다. DB에
나는 다음 (EF 코드-처음으로) 같은 것을 가지고
public class UserProfilePermissions
{
public UserProfile User { get; set; }
public Permission Permission { get; set; }
public bool IsAllowed { get; set; }
}
public class Permission
{
public int Id { get; set; }
public string Key { get; set; }
public string Group { get; set; }
}
그래서 모든 권한 (첫 번째 임무)가 생성 한 Permission
항목이있는 DB의를하고를 통해 매핑 IsAllowed
을 사용하여 "ALLOWED"또는 "DENIED"를 정의하는 매핑 테이블.
null
값은 설정되지 않은 권한을 정의하므로 기본값을 사용할 수 있습니다 (=> 권한을 설정하지 않아도 항상 "부인"이라고 말하지는 않음).
매핑 테이블은 또한 예를 들어, 같은 스타일로 사용될 수 있습니다. 역할.
답변 해 주셔서 감사합니다. 매우 훌륭하게 보입니다. DB 측면에서 귀하의 디자인은 어떻습니까? 예를 들어 테이블에있는 해당 모듈의 권한 유형을 수동으로 지정합니까? – Cemre
@Cemre : 기본 스키마가 추가되었습니다. – ChrFin