0

ASP MVC 4 Webアプリケーションをビルドしていますが、ビューに対してきめ細かいアクセス許可を作成する必要があります。これは、ユーザーの役割、データ型の要求、およびその他の承認ルールに応じて、一部のユーザーにいくつかのアクションを表示する必要があることを意味します。

コントローラー側では、必要に応じてAuthorize属性を配置し、次のようなきめ細かいコードを作成します。

public ActionResult Index() {
  List<Survey> surveys;
  if (MyUser.IsSuperUser) {
    surveys = surveyRep.AllSurveys.ToList();
  }
  else {
    surveys = surveyRep.VisibleSurveys.ToList();
  }

  return View(surveys);
}

私はマルチテナントアプリケーションを構築しているため、スーパーユーザーではないユーザーには「表示されている」調査のみが表示されます。スーパーユーザーは常にすべてを見ることができます。

ここでの問題は、ロジック(DRY)を複製せずに、ビュー側で同じものを作成する方法です。

現在、スーパーユーザーではなく、テナントリンクが1つしかないユーザーの場合、次のかみそりビューロジックを使用します。

<h2>Create</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Survey</legend>

        @if (!MyUser.IsSingleTenant) {
            <div class="editor-label">
                Tenant
            </div>
            <div class="editor-field">
                @Html.DropDownListFor(model => model.TenantID, ...
                @Html.ValidationMessageFor(model => model.TenantID)
            </div>
        }

MyUserは現在ログインしている使用を返し、IsSingleTenantは彼女が単一のテナントにのみリンクするかどうかを示します。

これにより、多くの「if-then」ロジックでビューが乱雑になるのではないかと心配しています。

他の人はこれをどのように解決しますか?

ありがとう、イド。

4

1 に答える 1

1

このアプローチには何も問題はありません。これらのセクションを部分ビューに配置して、読みやすくすることができます。

<h2>Create</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Survey</legend>

        @if (!MyUser.IsSingleTenant) {
            @Html.Partial("Tenant")
        }

        ...
    </fieldset>
}
于 2012-09-11T14:53:52.720 に答える