2017-11-30 1 views
0

기존 클래스를 수정하여 한 메소드가 다른 역할을 허용하고 다른 메소드가 해당 역할을 가지기를 원하지 않습니다.클래스 내의 메소드에 대한 다른 역할

[Authorize("addedit, admin")] 
public class JobsController : BaseODataController<Job> 
{ 
    //This method needs to allow one more role! 
    public Job Get(int Id) 
    { 
     //stuff 
    } 

    public IHttpActionResult Post(Job job) 
    { 
     //stuff 
    } 

    public IHttpActionResult Update(int id) 
    { 
     //stuff 
    } 
} 

문제는이 역할을 추가하여 클래스 수준에서 추가해야하며이 역할이이 클래스의 모든 메서드에 액세스 할 수 있도록합니다. 이 역할이 클래스에 액세스하려고하지만이 방법 만 사용할 수있게하려고합니다.

[Authorize("addedit, admin, newrole")] 
public Job Get(int Id) 
{ 
    //stuff 
} 

[Authorize("addedit, admin")] 
public IHttpActionResult Post(Job job) 
{ 
    //stuff 
} 

그러나 실제로는 여러 가지 방법이 있으므로 각각에 대해 이렇게 실제로이이 클래스가 지저분 -이 일을하는 가장 간단한 방법은이 다음 클래스 수준에서 속성을 제거하는 것입니다. 이 작업을 수행하거나이 메소드를 자신의 클래스로 분리하지 않고이 클래스에 액세스 할 수있는 방법은 없으며 새 역할을 통해 단 하나의 메소드 만 허용 할 수 있습니까?

+0

컨트롤러 레벨에'[Authorize ("addedit, admin")]'을두고 특정 동작에서'[Authorize ("addedit, admin, newrole")]를 추가하면 어떻게됩니까? –

+0

사용자가 "newrole"만 가지고 있으므로 클래스 수준의 권한을 초과하지 않으므로이 방법은 작동하지 않습니다. – user3407039

+0

컨트롤러가 너무 많아 컨트롤러를 분리하지 않는 이유는 무엇입니까? [Route]를 사용하여 다른 끝점을 동일한 끝점에 매핑 할 수 있지만 각 사용자 그룹에 대한 컨트롤러를 만들 수 있습니다. 컨트롤러를 정적으로 만들 수도 있습니다. – Dragonvil

답변

0

사실 실제로 속성을 사용하여 수행 할 방법이 없습니다. 요컨대, 당신은 그런 것을 찾고 있습니다.

[MyAuthorize(Roles = "addedit, admin", Except = "Get")] 
public class JobsController : BaseODataController<Job> 
{ 
    [MyAuthorize(Roles = "addedit, admin, newrole")] 
    public Job Get(int Id) 
    { 
     //stuff 
    } 

    public IHttpActionResult Post(Job job) 
    { 
     //stuff 
    } 

    public IHttpActionResult Update(int id) 
    { 
     //stuff 
    } 
} 

당신은 그것을 위해 정의 파생 된 권한 부여 속성을 제공해야한다.

작업에서 수동으로 역할을 확인하려는 경우 다른 옵션은 [AllowAnonymous]입니다. 뭔가가 좋아.

[Authorize("addedit, admin")] 
public class JobsController : BaseODataController<Job> 
{ 
    [AllowAnonymous] 
    public Job Get(int Id) 
    { 
     //Check the roles (addedit, admin, newrole) manually 

     //stuff 
    } 

    public IHttpActionResult Post(Job job) 
    { 
     //stuff 
    } 

    public IHttpActionResult Update(int id) 
    { 
     //stuff 
    } 
} 
관련 문제