FluentSecurity与MVCSiteMapProvider

时间:2012-05-04 01:41:34

标签: asp.net-mvc-3 mvcsitemapprovider fluent-security

我希望在MvcSiteMapProvider中使用它来隐藏/显示菜单项,而不是在我的mvc.sitemap文件中加倍和定义角色。

我已经浏览了2.0alpha1的来源,但似乎无法弄清楚如何做以下事情:

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

有人能指出我正确的方向吗?

由于

1 个答案:

答案 0 :(得分:3)

我能够在kristoffer-ahl的帮助下在实际的github项目页面上解决这个问题

这是解决方案

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;
}