PublicAccess权限在Umbraco 6中不起作用

时间:2013-02-06 17:35:29

标签: permissions umbraco

我正在尝试向用户显示列出一些文档(节点)的表。这些文档使用角色权限(右键单击>公共访问>角色权限)进行保护,我只想显示该用户有权访问的文档。

在这里和那里检查后,我发现没有任何“Node.Permissions”方式,所以你必须通过Access.HasAccess()。

我已经使用了它,并且我已经设置了权限,但是当我使用该方法时,它总是返回true。我做错了什么?

这是构建节点列表的代码,它完美地运行:

    public static List<Node> GetAllNodeChildrenRecursively(int nodeId, string typeName)
    {
        var node = new Node(nodeId);
        var lstNodes = new List<Node>();
        foreach (Node childNode in node.Children)
        {
                var child = childNode;
                if (child.NodeTypeAlias == typeName)
                {
                    lstNodes.Add(childNode);
                }

                if (child.Children.Count > 0)
                {
                    lstNodes.AddRange(GetAllNodeChildrenRecursively(childNode.Id, typeName));
                }
        }
        return lstNodes;
    }

这是删除我无权访问的代码:

        var availableNodes = new List<Node>();
        foreach(Node n in nodes)
        {
            if(Access.HasAccces(n.Id, memberId))
            {
                availableNodes.Add(n);
            }
        }
        return availableNodes;

好吧,Access.HasAccess总是返回true,我用来测试的成员不是有权访问该节点的MemberGroup的一部分。我设置权限错误或没有正确检查或什么?

我迷路了。

1 个答案:

答案 0 :(得分:1)

据我所知,你应该使用以下方法:

*对HasAccess有几种不同的调用,因此它可能也取决于你的Umbraco版本。

var availableNodes = new List<Node>();
        try
        {
            //this will throw an argument exception if there is not a current user logged in
            var currentMember = System.Web.Security.Membership.GetUser();

            foreach (Node n in retVal)
            {
                if (Access.HasAccess(n.Id, n.Path, currentMember))
                {
                    availableNodes.Add(n);
                }
            }
        }
        catch(ArgumentException e)
        {
            //do something when there is not a logged in member
        }
        return availableNodes;