既存のクラスを変更して、あるメソッドが異なるロールを許可し、他のメソッドがそのロールを持たないようにします。クラス内のメソッドの異なるロール
[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
}
しかし現実には、このクラスでは、実際にはそれほどそれぞれに対してこれを行うことは厄介で、多くの異なる方法があります。これを実行したり、このメソッドを自分のクラスに分割したりすることなく、このクラスへのアクセスを許可する方法はありますか?
コントローラレベルで[Authorize( "addedit、admin")] 'を残し、特定のActionで[Authorize(" addedit、admin、newrole ")]を追加するとどうなりますか? –
ユーザーは「newrole」しか持たないため、クラスレベルでの権限を超えないため、これは機能しません。 – user3407039
1つのコントローラに非常に多くのメソッドがある場合、コントローラを分割しないのはなぜですか? [Route]を使用すると、他のマップポイントを同じエンドポイントにマップすることはできますが、各ユーザーグループに対してコントローラを作成することができます。コントローラーを静的にすることさえできますか? – Dragonvil