6

私は asp.net mvc プロジェクトにロール マネージャーと Windows 認証を使用しています。ビューアーとエディターの 2 つのロールがあります。

    <authentication mode="Windows" />
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
        <providers>
          <clear />
          <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        </providers>
    </roleManager>

エディターはアプリケーション全体にアクセスできますが、ビューアーは 2 つのアクションにしかアクセスできません

最初に、エディターがすべてにアクセスできるようにするベースコントローラーの Authorize 属性を配置しようとしました:

[Authorize(Roles = "Editors")]
public class BaseController : Controller

次に、これら 2 つのアクションに Authorize 属性を追加します。

[Authorize(Roles = "Viewers,Editors")]
public ActionResult Report(PaymentsUnallocatedAndQueriedModel model)

機能しません。視聴者が現在意味のあるアクションにアクセスすることはできません。

各アクションの先頭に Authorize 属性を繰り返すのは得策ではないと思います。

それに対するより良い解決策があれば教えてください

4

1 に答える 1

5

これは、ツリーの観点から見る必要があります。アクションに到達するには、まずコントローラーに到達できる必要があります。この場合、コントローラーを編集者グループに制限しているため、閲覧者はそこまで到達することさえできません。最も役立つ可能性が最も高いのは、コントローラーを制限し、Viewers, Editors編集者のみのアクセス許可が必要なアクションでそれらを指定することです。これにより冗長な属性が生成されますが、ロール メンバーシップに基づいて各アクションを手動で制限する必要がある場合は、コード コストを考慮してください。

[Authorize(Roles = "Viewers, Editors")]
public class BaseController : Controller
{

    [Authorize(Roles = "Editors")]
    public ActionResult EditReport(PaymentsUnallocatedAndQueriedModel model)
    {
        // Some editor only functionality
    }

    public ActionResult Report(PaymentsUnallocatedAndQueriedModel model)
    {
        // Some functionality for both. No attribute needed
    }
}
于 2012-08-29T14:08:38.900 に答える