1

私の MVC アプリケーションには、いくつかの役割があります。元管理者、一般。私は CustomRoleProvider を使用しますが、ビューで次のことを行います

@if (Roles.IsUserInRole("admin"))
    {
        <div class="editor-label">@Html.RadioButton("selection", "View Project Details", false)View Project Details</div>
    } 

最近、ビジネスロジックexに基づいてさらにアクセスを制限するように言われました。プロジェクトの作成者が「xyz」の場合、リンクへの「xyz」アクセスを許可します。1 つの方法は、コントローラーをチェックし、ロールとビジネスロジックに基づいて異なるビューを返すことです。それは手に負えなくなるでしょう!これを達成する他の方法はありますか?

4

2 に答える 2

0

モデルまたは ViewBag にアクセス許可を保存し、上記の if ステートメントを使用するだけです。IsInBuissnesRole同様のメソッドを作成し、その中にロジックを実装することもできます。

于 2013-05-22T04:17:45.850 に答える
0

ここで同様の質問に答えました。

基本的に、ビューの特定の機能を有効にする/ユーザーに表示する必要があるかどうかを示すプロパティでビューモデルを使用する必要があります。次に、コントローラー(おそらくいくつかのビジネスロジックサービスに基づく)がこれらの値を設定する必要があります。

例:

// Model
public class Procuct
{
  public int Id {get; set;}
  public string Name {get;set;}
}


// Viewmodel
public class ProcuctViewModel
{
  public int Id {get; set;}
  public string Name {get;set;}
  public bool CanEdit {get;set;}
  public bool CanDelete {get; set;}
}

// somewhere in controller
var product = new ProductViewModel(_repo.GetProductById(1));
if (Roles.IsUserInRole("admin"))
{
  product.CanEdit = true;
}
// ...
return View(product);

次に、ビューがよりシンプルになり、すべてのセキュリティ関連がコントローラーに移動され、単体テスト可能になります

于 2013-05-22T04:18:00.493 に答える