0

私は、サイトの領域 (モジュール) 内のセキュリティを強化する過程にあるプロジェクトに取り組んでいます。全部で 5 つのモジュールがあり、現在 5 つすべてが 3 つのチェックを行う同じ Custom Authorize Attribute クラスを共有しています。

  1. 受け入れ条件に同意しましたか?はい、2 に進みます。いいえ、あなたは無許可であり、無許可のページに移動します。
  2. あなたはサイトのメンバーですか?はい、3 に進みます。いいえ、あなたは無許可であり、無許可のページに移動します。
  3. あなたの役割はこのモジュールで許可されていますか? はい、次に進みます。いいえ、あなたは許可されていないため、許可されていないページに移動します。

現在、5 つのモジュールのクラスは、このカスタム承認属性によって装飾されており、個々のロールがチェックされています (3/5 のモジュールには 1 つの個別のロールがあり、他の 2 つのモジュールには複数のロールがあり、1 つのモジュールには 4 つのロールがあり、もう 1 つのモジュールには I'mについての投稿は現在 3 です)。しかし、1 つのモジュールでセキュリティを強化する中で、それをどのように行うかが問題になっています。変更中のこのモジュールには、3 つの役割 (読み取り専用、ユーザー、管理者) があります。

  • 読み取り専用: そのようですね。追加/編集/削除の権限はありません。
  • ユーザー: 読み取りアクセス権があり、保留中の他の権限チェックを追加/編集/削除できます。
  • 管理人:お好きなようにどうぞ。追加/編集/削除して、管理者専用エリアに入ることができます。

ユーザーは、最大 2 つの他のリストのアクセス許可のチェックを含む二次的なチェック セットがあるため、完全に特殊なケースです (常に 2 つのリストの 1 つをチェックし、もう 1 つは 1 つの選択領域用です)。

私の質問は、このセキュリティは元のカスタム承認属性の外部にあり、この 1 つのモジュールに依存しているため、新しいカスタム承認属性を作成する必要があるか、元のものを変更する必要があるかということです。

私の最初の考えは、このモジュールのクラス全体の装飾を取り除き、代わりに各メソッドに適用することでした。このルートに進むと、現在のカスタム承認属性に新しいロジックを追加するのに役立ちます。

しかし、そこには問題があります。管理者および読み取り専用ユーザーに対してこれを行うとうまくいきますが、問題はユーザーの場合です。ユーザーは、表示しようとしている特定のレコードへのアクセス許可があるかどうかを確認するために、二次チェックを行う必要があります。そうでない場合は、読み取り専用ユーザーのように許可されますが、編集はできません。

この節があるため、チェックとカスタム Authorize 属性を行うプライベート メソッドを使用するかどうかについては、少し確信が持てません。

どんな方向性やアイデアも大歓迎です。ありがとう。

4

1 に答える 1

0

それで、これについて多くのことを考えた後、私は次の解決策を思いつきました。これはサイト内の 1 つのモジュールのみに限定されているため、私が持っていた現在のカスタム承認属性には追加しませんでした。

ただし、すべてのケースを判断するために、ユーザーがヒットできるすべてのページ (Post メソッドを除く) でチェックを実行します。

ユーザーが管理者である場合、変更アクセス権が与えられます。読み取り専用ユーザーの場合、変更アクセス権は付与されません。ユーザーの場合、パーミッションもチェックされ、それらのパーミッションを持っている場合は、変更アクセスが与えられます。それ以外の場合、読み取り専用ユーザーのように扱われます。

ユーザーのロールとアクセス許可、およびユーザーが変更アクセス権を持っているかどうかをセッション内に保存しました。セッションが見つからない場合は、戻って追加し直します。ユーザー管理領域でユーザーの役割/権限が更新された場合は、それらのセッションも更新して強制終了します。

また、何かを変更するページ (追加/編集/削除) に、変更アクセス権がない場合に不正アクセス ページが起動されるようにするロジックのチャンクを追加しました。

これまでのところ、これはうまく機能しているようで、これまでのところ問題はありません。このロジックを Custom Authorize Attribute クラスのように 1 か所に追加した方がよかったのですが、同時に、それが 1 つのモジュール用であったため、そこに配置するのは適切ではなかったと思います。ありがとう。

于 2017-01-13T14:53:18.083 に答える