사용자가 주어진 리소스에 대한 액세스 권한이 있는지 여부를 확인하는 사용자 지정 AuthorizeAttribute를 만들었습니다. 그것은 일반적인하기 위해, 나는 속성에 전달 된 두 개의 변수가 필요합니다route 매개 변수를 사용자 지정 특성에 전달
- 요청 된 리소스 유형
- 요청 된 리소스 ID를 내가 쉽게 자원 유형이 요청 된 속성을 알 수
, 요청 된 ID를 속성에 전달하는 방법은 무엇입니까?
[System.Web.Http.Authorize]
[System.Web.Http.RoutePrefix("api/accounts")]
public class AccountController : ApiController
{
[AuthorizeIsOwnResource(ResourcesType = ResourcesTypes.Account, ResourceId = ?)]
[System.Web.Http.HttpGet]
[System.Web.Http.Route("test/{id}")]
public ActionResult Test(string id)
{
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
어떤 제안 : 여기 내 코드의 (a ?
표시)없는 마지막 변수이다? 나는 함께 속성 매개 변수를 모두 제거 할 수 있고 AuthorizeCore
에있는 HttpContextBase
에서 요청 된 자원 유형과 ID를 암호 해독 할 수 있다고 생각합니다. 하지만 내 유일한 선택인가?
에
actionContext.ControllerContext.RequestContext.RouteData;
에서 요청 ID를 얻을. 가장 좋은 솔루션은 HttpContextBase에서 컨트롤러 및 액션 이름에 액세스하는 것입니다. 더 깔끔하고 구현하기 쉽고 오류 발생 가능성이 적습니다. –문제에 대해 조금 숙고 한 후, 나는 당신이 절대적으로 옳다고 생각합니다. HttpContextBase에서 RouteData를 추출 할 수도 있습니다. 나는 그것을 테스트 한 후에 해결책을 게시 할 것이다. – MichaelCleverly