2012-04-26 10 views
1

MVC 3の特定のフィールドで権限を設定することはできますか?特定のASP .NET MVC 3フィールドの認可を設定していますか?

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

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

私は特定の分野でこのような何かをしたいと思います:

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

UPDATE1:

StackOverflowのウサギの役割ダウンもう少し研究は、私は部分的なビューを使用する必要があることが明らかになりました。ユーザーは、彼らが「配列」フィールドの編集を可能にする部分図を得るRoleAであれば

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

</div> 

だから私の見解で、私はこのコードを追加します。それ以外の場合は、「シーケンス」フィールドのみの表示が得られます。

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

私はあなたがすでにロールB​​.しかし、あなたのユーザーにテキストボックスを表示しないようにするためにビューを変更する方法を考え出したことがわかり
<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> 
+0

は、あなたがそれを試みたことがありますか? –

+1

申し訳ありませんが、MVC 3フィールドはどういう意味ですか?あなたは特定のアクションに対して[Authorize]を設定することを意味しますか?または、RoleBが変更できないようにするローカル変数(フィールド) – mfanto

+0

@JamieDixon - どこに試して入れていいのかわかりません。私はそれがコントローラに入るかもしれないと推測していますが、フィールド固有のビュー/モデルです。 –

答えて

1

また、サーバー側の検証を実行して、ロール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のまたは同様のツールで。)

関連する問題