1

MVC 3 の特定のフィールドに承認を設定することは可能ですか?

私の最初の考え (および MSDN の調査) は、[Authorize] タグはコントローラー レベルのアクション (作成、編集、インデックスなど) のみに使用されることを示しています。コントローラーアクションでこれを行うことができます:

[Authorize(Roles = "RoleA,RoleB")]
   public ActionResult Create()
    {            
        return View(new Tracking());
    } 

シナリオは、2 つのロール (RoleA と RoleB) が「編集」コントローラーにアクセスできるというものです。ただし、最初のフィールドを変更できるのは RoleA だけです。もう一方の役割 (B) は、フィールドを表示することしかできません。

特定のフィールドで次のようなことをしたいと思います。

[Required]
[Range(1, 99)]
[Authorize(Roles = "RoleA")]
public int Sequence { get; set; }

更新1:

StackOverflow のウサギの役割をもう少し調査すると、部分ビューを使用する必要があることがわかります。

したがって、私の見解では、次のコードを追加します。

<div>
    @if (Context.User.IsInRole("RoleA"))
    {
        @Html.Partial("_SequenceEdit")
    }
    else
    {
       @Html.Partial("_SequenceView")
    }

</div>

したがって、ユーザーが RoleA の場合、「sequence」フィールドを編集できる部分ビューが表示されます。それ以外の場合、「sequence」フィールドのみが表示されます。

私のビューのみの部分ビューは次のようになります。

<div class="editor-label">
        @Html.LabelFor(model => model.Sequence)
    </div>
    <div class="editor-field">
        @Html.DisplayFor(model => model.Sequence)
        @Html.HiddenFor(model => model.Sequence)
        @Html.ValidationMessageFor(model => model.Sequence)
    </div>
4

1 に答える 1

1

役割 B のユーザーにテキスト ボックスを表示しないようにビューを変更する方法は既に理解されているようですが、役割 A のユーザーのみがフィールドを編集できるようにするには、サーバー側の検証も行う必要があります。

[Authorize(Roles = "RoleA,RoleB")]
[HttpPost]
public ActionResult Edit(int trackingID, Tracking newTrackingObject)
{
    // grab the current version of the tracking object from your data repo
    var oldTrackingObject = trackingRepo.GetByID(trackingID);

    // check if the user is in role A and edit the sequence number
    if(Context.User.IsInRole("RoleA"))
        oldTrackingObject.Sequence = newTrackingObject.Sequence;

    // continue processing the new tracking object

    // after all processing is done, persist the edited tracking object back to the repo
    trackingRepo.Update(oldTrackingObject);
    trackingRepo.SaveChanges();
}

これにより、役割 B​​ のユーザーが非表示のフォーム フィールドを手動で編集して (たとえば、FireBug または同様のツールを使用して) シーケンス フィールドを変更することを防止できます。

于 2012-04-27T16:00:48.680 に答える