1

[Authorize(Roles = "Administrator")] などを使用してページへのアクセスを制御していますが、それに加えて、クライアントはさらに多くのことを望んでいます。サブユーザーを作成し、アクセスできる画面を決定できるユーザーがいます。たとえば、ユーザー 1 は、サブユーザー 1 が画面 1 ~ 4 を取得するが、画面 5 ~ 8 を取得しない可能性があることを示す場合があります (ここでは簡単にするために数字を使用しています)。SubUser 2 には奇数の画面が表示され、SubUser には偶数の画面が表示される場合があります。

これは、ロールベースのセキュリティのようには見えません。ユーザーがサブユーザーを選択するための画面を作成し、すべての画面のチェックボックスを使用して別の画面に移動し、サブユーザーが到達できるものをチェックします。簡単です。

私の質問は、アプリでそれを強制する方法ですか? 明らかな方法は、get ごとに DB にアクセスし、そのユーザー名とその画面の ID を渡して、アクセス権があるかどうかを確認することです。すべてのページでそのチェックのためにDBにアクセスしないようにするためのより良い方法はありますか? セッション オブジェクトがないため、アクセスしてセッションに保存できるページ ID の配列を (1 回だけ) 取得できません。

4

1 に答える 1

0
     public class ServiceCheckAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                // check user role
                // Check if user has access to this action/page
                if (userHasAccess)
                {
                    base.OnActionExecuting(filterContext);
                }
                else
                {
                    filterContext.Result = new RedirectToRouteResult(new
                    RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
                }
            }
        }

ユーザーアクセシビリティを確認する必要がある各コントローラーで、この属性を追加します[ServiceCheckAttribute]

于 2013-05-16T14:39:12.597 に答える