문제점 도메인EF 프록시 복잡한 데이터 구조
지금은 EF 그래서 난 간단하게 할 수있는 사용하고
public class HierarchyObject
{
[Key]
public int Id { get; set; }
[ForeignKey("Parent")]
public int ParentId { get; set; }
public virtual HierarchyObject Parent { get; set; }
public virtual ICollection<HierarchyObject> Children { get; set; }
}
좋아요 ... 나는 이런 식으로 뭔가를 보이는 기업을 말해봐 뭔가 등 ...
var ctx = new MyContext();
var getAll = ctx.HierarchyObjects.AsQueryable();
지금은 너무 특정 사용자 만 내가 migh 이러한 개체의 하위 집합에 기본 CRUD 작업을 할 수 이러한 개체에 권한을 추가 말할 수 이제 다음과 같은 작업을 수행 할 수 있습니다.
getAll = getAll().Where(o => o.Permissions.Any(p => p.Read && UserId == currentUserId));
이렇게하면 사용자가 액세스 할 수있는 항목 만 반환됩니다.
이제 이것을 쿼리 가능한 끝점 뒤에 표시하고 OData라고 말합니다.
중 하나로, OData 날과 같은 URL을 쓸 수 있습니다 ...
~/API/HierarchyObject? $ = 어린이가
... 난 그냥 내 보안을 깼다 수행 한 확장 결과는 "내가 접근 할 수있는 모든 객체와 그 자식"이 될 것이고 실제 질문은 "내가 액세스 할 수있는 모든 객체가 내가 액세스 할 수있는 모든 자식으로 확장 될 수 있어야하므로 EF 프록시가 내 권한 규칙에 대해 알지 못하기 때문에 에".
그래서 제 질문은
이 EF를 알 수있는 방법이 있나요입니다 어린이 재산권 그것은 또한 where 절 ...
o.Children = o.Children.Where(o => o.Permissions.Any(p => p.Read && UserId == currentUserId));
을 적용 ... 것을 적용해야 크롤링 할 때 내 모든 계층 구조 객체에 대해 "프록시"할 때마다 그것을 지배합니까?
자세한 내용
나는이 발견 : 모든 아니라 좋은
How can I dynamically customize a POCO proxy in EF 4?
을 EF4에 불가능하다 난 할 노력하고있어 ssays하지만 난 그래서 EF6을 사용하고 있습니다 마이크로 소프트/다른 누군가가 어쩌면 지금까지 어떤 방식으로 프록시 작성 프로세스를 가로 채거나 대체 할 수있는 좋은 방법을 허용 할 수 있다고 생각했습니다. 아마도 IDbSet 유형을 프록시 규칙을 정의 할 수있는 규칙 훅의 드라이버로 사용했을 것입니다 관계형 크롤링을 위해 어떤 식 으로든 나는 아무것도 찾지 못했다!