Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Permissions PublicAccess权限在Umbraco 6中不起作用_Permissions_Umbraco - Fatal编程技术网

Permissions PublicAccess权限在Umbraco 6中不起作用

Permissions PublicAccess权限在Umbraco 6中不起作用,permissions,umbraco,Permissions,Umbraco,我试图向用户显示一个列出一些文档(节点)的表。这些文档使用角色权限(右键单击>公共访问>角色权限)进行保护,我只想显示此用户有权访问的文档 在到处检查之后,我发现没有任何“Node.Permissions”方法,所以您必须通过Access.HasAccess() 我已经使用了它,并且设置了权限,但是当我使用该方法时,它总是返回true。我做错了什么 这是构建节点列表的代码,它可以完美地工作: public static List<Node> GetAllNodeChildre

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

在到处检查之后,我发现没有任何“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;
    }
public静态列表GetAllNodeChildren递归(int-nodeId,string-typeName)
{
var节点=新节点(nodeId);
var lstNodes=新列表();
foreach(Node.Children中的Node-childrende)
{
var child=childNode;
if(child.NodeTypeAlias==typeName)
{
lstNodes.Add(childNode);
}
如果(child.Children.Count>0)
{
AddRange(getAllNodeChildren递归地(childNode.Id,typeName));
}
}
返回节点;
}
这是删除我无法访问的内容的代码:

        var availableNodes = new List<Node>();
        foreach(Node n in nodes)
        {
            if(Access.HasAccces(n.Id, memberId))
            {
                availableNodes.Add(n);
            }
        }
        return availableNodes;
var availableNodes=new List();
foreach(节点中的节点n)
{
if(Access.hasacces(n.Id,memberId))
{
添加(n);
}
}
返回可用节点;
好的,Access.HasAccess总是返回true,并且我用来测试的成员不是有权访问该节点的MemberGroup的一部分。我是否设置了错误的权限,或者没有正确地检查权限,或者什么


我迷路了。

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

*有几个不同的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;
var availableNodes=new List();
尝试
{
//如果没有当前用户登录,这将引发参数异常
var currentMember=System.Web.Security.Membership.GetUser();
foreach(retVal中的节点n)
{
if(Access.HasAccess(n.Id,n.Path,currentMember))
{
添加(n);
}
}
}
捕获(e)
{
//在没有登录成员时执行某些操作
}
返回可用节点;