2014-12-25 2 views
0

I 사용자 정의 EntitySetController에서 상속 WebAPI의 하나로, OData 컨트롤러 내 사용자 지정 권한을 처리하는 속성 권한을 부여, 여기 사용자 정의 AuthorizeAttribute WebApi의 하나로, OData EntitySetController

[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)] 
public class RequirePermissionsAttribute : System.Web.Http.AuthorizeAttribute 
{ 
    public Permissions[] Permissions { get; set; } 


    public RequirePermissionsAttribute() 
    { } 

    public RequirePermissionsAttribute(params Permissions[] permissions) 
    { 
     this.Permissions = permissions; 
    } 

    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     // Custom authorization logic 
    } 

이 지금은이 속성을 추가 할

내 속성에 대한 코드 생성 가져 오기() 메소드에, 그것은

public class ItemsController : EntitySetController<Item, Guid> 
{ 
    [EnableQuery(MaxExpansionDepth = 5)] 
    [RequirePermissionsAttribute(Permissions.ViewAll)] 
    public override IQueryable<Item> Get() 
    { 
    //Code go here 
    } 
} 

를 호출 얻을하지만) CreateEntity (에 같은 속성을 추가 할 때 그것은

를 호출되지는 결코3210
[RequirePermissionsAttribute(Permissions.Add)] 
protected override Item CreateEntity(Item item) 
{ 
    // Create item 
} 

는 어떤 도움

감사

답변

0

당신은 꼬리 "속성"단어없이 RequirePermissions로 속성을 사용, 그래서이

[RequirePermissions(Permissions.Add)] protected override Item CreateEntity(Item item) { // Create item }

+0

이것은 단축 된 형태로 작동하지 않았습니다! –

0

이슬람

처럼되고 코드를 변경해야 WebAPI 소스 코드에서 POST 요청시 내부 가상 함수 CreateEntity()이 호출됩니다. 여기 EntitySetController에 소스 코드를 : 당신이 원한다면,

POST ~/odata/Items 

Content-type: application/json 

{"Id":"9daf653f-212c-42e3-80a4-4778e445c092"} 

enter image description here

그러나 : 나는 당신의 샘플 코드를 사용하고 POST 요청을 보내

public virtual HttpResponseMessage Post([FromBody] TEntity entity) 
{ 
    TEntity createdEntity = CreateEntity(entity); 
    TKey entityKey = GetKey(entity); 
    return EntitySetControllerHelpers.PostResponse(this, createdEntity, entityKey); 
} 

CreateEntity()는 다음과 같이 호출 할 수 있습니다 올바른 응답을 얻으려면 을 다시 지정해야합니다. Post() 메서드에서 CreateEntity() 뒤에 GetKey()이 호출되기 때문입니다. 동일한 정보는 다음과 같이 CreateEntity()의 발언에서 언급 한 :

enter image description here

샘플 테스트가

나는 ItemsController에 다음과 같은 두 가지 함수를 만들 :

protected override Guid GetKey(Item entity) 
{ 
    return entity.Id; 
} 

[RequirePermissionsAttribute(Permissions.Add)] 
protected override Item CreateEntity(Item item) 
{ 
    // Create item 
    return item; 
} 

그리고이를 보내 위에서 언급 한 동일한 POST 요청을 통해 다음 응답을 얻을 수 있습니다.

HTTP/1.1 201 Created 
Cache-Control: no-cache 
..... 
Content-Length: 124 

{ 
    "odata.metadata":"http://localhost:47794/odata/$metadata#Items/@Element","Id":"9daf653f-212c-42e3-80a4-4778e445c092" 
} 

희망이 있으면 도움을 드리겠습니다. 감사.

관련 문제