2

ここで @Html.ActionLink ヘルパーをクレートします。ユーザーの権限を確認します。はいの場合、このリンクを表示します。そうでない場合は表示しません。問題は@Ajax.ActionLinkにあり、Ajax.ActionLinkのヘルパーを作成できますか? パーミッションをチェックするカスタム ヘルパーを作成します。html.actionlink ヘルパーで問題なく動作します。ajax アクションで権限を確認するにはどうすればよいですか?

 public static IHtmlString CustomActionLink(this HtmlHelper htmlHelper, int userId, string reqController, string reqAction,  string linkText,int reqActionId = 0)
    {

        bool isAllowed = checkPermission(userId, reqController, reqAction, reqActionId);
        if (isAllowed == false)
        {
            return MvcHtmlString.Empty;
        }
        return htmlHelper.ActionLink(linkText, reqAction, new { id =reqActionId });
    }

これと同じチェックを Ajax Actions で実行したいと考えています。

4

2 に答える 2

4

ASP.NET MVC では、HTML ヘルパー メソッドは、既存の HtmlHelper およびクラスの単なる拡張メソッドです。.NET の拡張メソッドとそのしくみAjaxHelperを理解すれば、この概念をクラスに適用することはそれほど難しくありません。AjaxHelper

public static IHtmlString CustomAjaxActionLink(
    this AjaxHelper ajaxHelper, 
    AjaxOptions ajaxOptions,
    int userId, 
    string reqController, 
    string reqAction,  
    string linkText,
    int reqActionId = 0
)
{
    bool isAllowed = checkPermission(userId, reqController, reqAction, reqActionId);
    if (!isAllowed)
    {
        return MvcHtmlString.Empty;
    }

    return ajaxHelper.ActionLink(
        linkText, 
        reqAction, 
        new { id = reqActionId }, 
        ajaxOptions
    );
}

ビュー内では、このカスタム ヘルパーを使用するだけです (もちろん、含まれているクラスが宣言されている名前空間をスコープに持ち込んだ後):

@Ajax.CustomAjaxActionLink(
    new AjaxOptions { UpdateTargetId = "foo" },
    123,
    "SomeController",
    "SomeAction",
    "click me and get a surprise!",
    456
)
于 2012-07-02T08:44:29.807 に答える
0

AuthorizeAttributeを使用するのはどうですか?

public class AuthorizeAdminAttribute : AuthorizeAttribute
    {

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if(!AppSecurity.Instance.IsUserInRoles(filterContext.HttpContext.User, AdminGroups))
            {
                HandleUnauthorizedRequest(filterContext);
            }
            base.OnAuthorization(filterContext);
        }
    }

コントローラでは、次のようなものを使用できます。

[AuthorizeAdmin]
        public ActionResult Index()
        {
            return View();
        }
于 2012-10-23T07:07:06.353 に答える