2

これを MvcSiteMapProvider と一緒に使用して、 mvc.sitemap ファイルでロールを二重にして定義する代わりに、メニュー項目を非表示/表示することを望んでいました。

私は 2.0alpha1 のソースを調べましたが、次のようなことを行う方法を理解できないようです:

bool hasAccess = SecurityConfiguration.Current.HasAccess(controller, action, area)

誰かが私を正しい方向に向けることができますか?

ありがとう

4

1 に答える 1

3

実際の github プロジェクト ページのkristoffer-ahlの助けを借りて、これを解決できました。

ここに解決策があります

public static bool ActionIsAllowedForUser(string area, string controllerName, string actionName)
{
    var configuration = SecurityConfiguration.Current;

    string fullControllerName = string.Format("Web.Controllers.{0}Controller", controllerName);
    if (!string.IsNullOrEmpty(area))
    {
        fullControllerName = string.Format("Web.Areas.{0}.Controllers.{1}Controller", area, controllerName);
    }

    var policyContainer = configuration.PolicyContainers.GetContainerFor(fullControllerName, actionName);
    if (policyContainer != null)
    {
        var context = SecurityContext.Current;
        var results = policyContainer.EnforcePolicies(context);
        return results.All(x => x.ViolationOccured == false);
    }
    return true;
}
于 2012-05-07T07:32:07.380 に答える