2014-12-26 2 views
1

소유권 주장을 사용하여 MVC의 리소스에 대한 액세스를 제어하려고합니다. 논쟁을 통해 자원을 보호하려고 할 때 고민 중입니다.ClaimsPrincipalPermission (특성)에 매개 변수 전달

  • http://tempuri/registration : AA11XX
  • http://tempuri/registration : BB11YY

내가 주장을 추가

: 내가 편집 작업은 자신이 소유 수행 차량이 될 수 있도록 원하는 경우에 대한 예를 들어, 주장이 MVC 액션은 다음과 같습니다.

[ClaimsPrincipalPermission(SecurityAction.Demand,Operation = "Post", Resource = "Vehicle/{registration}")] 
public ActionResult Edit(string registration) 
{ 
//Stuff 
} 

Edit 메서드에 전달되는 매개 변수가 등록 클레임 목록에 있는지 확인하려고합니다. 나는이 행동을 절대적으로 행동 안에서 할 수는 있지만, 선언적으로하고 싶다.

WIF 파이프 라인을 사용하여 CheckAccess 메서드를 재정의 할 수 있습니다.

 public class AuthorisationManager : ClaimsAuthorizationManager 
     { 
      public override bool CheckAccess(AuthorizationContext context) 
{ ... } 

AuthorizationContext에는 요청한 리소스와 사용자의 클레임이 포함됩니다. 누락 된 링크는 MVC 작업으로 전달 된 매개 변수를 알고 있습니다.

이 작업을 수행 할 수있는 방법이 있습니까, 아니면 모든 것을 잘못된 방식으로 접근하고 있습니까?

고마워,

답변

2

.NET 작업 속성 방법은, 당신은 동적 매개 변수에 전달할 수 없습니다 - 그래서이 작동하지 않습니다.

https://github.com/thinktecture/Thinktecture.IdentityModel/tree/master/samples/SystemWeb/ClaimsAuthorizeSample

+0

감사 :이 샘플을 참조 -

우리는 MVC와 WebAPI와 더 좋은 연극도 필수적 API를 가지고보다 유연한 버전을 만들었습니다. 전에 실제로 당신의 예를 보았습니다. 결국 routedata 컬렉션을 가져 와서 리소스의 자리 표시 자와 비교했습니다. 예를 들어 "Get", "order/{orderid}"리소스는 routedata에서 orderid를 봅니다. 이것은 mvc와 웹 API 사이의 라우팅이 다르기 때문에 고통스런 것으로 판명되었습니다. 나는 당신의 해결책이 더 잘 균형 잡힌 것 같아서 대답으로 표시 할 것입니다. 왜 그렇게 선언적 이었는지 나는 확신하지 못합니다. 당신은 분명히 이런 것들에 대한 권위자입니다. 그래서 나의 접근법이 나쁘다는 이유가 있다면 알려주십시오! –