我正在try 将特定用户的特定角色权限添加到特定 node .为此,我使用以下代码:

private BaseDataVariableState createThing(NodeId requestedNodeId, NodeId requestedDataType, string requestedBrowseName, BaseObjectState parentNode, bool x)
        {
            BaseDataVariableState variable = new BaseDataVariableState(parentNode);
            
            variable.SymbolicName = requestedBrowseName;
            variable.ReferenceTypeId = ReferenceTypes.Organizes;
            variable.TypeDefinitionId = VariableTypeIds.BaseDataVariableType;
            variable.NodeId = requestedNodeId;
            variable.BrowseName = new QualifiedName(requestedBrowseName);
            variable.DisplayName = new LocalizedText(requestedBrowseName);
            variable.WriteMask = AttributeWriteMask.DisplayName | AttributeWriteMask.Description;
            variable.UserWriteMask = AttributeWriteMask.DisplayName | AttributeWriteMask.Description;
            variable.DataType = requestedDataType;
            variable.ValueRank = ValueRanks.Scalar;
            variable.AccessLevel = AccessLevels.CurrentReadOrWrite;
            variable.UserAccessLevel = AccessLevels.CurrentReadOrWrite;
            variable.Historizing = true;
            variable.Value = 0;
            variable.StatusCode = StatusCodes.Good;
            variable.Timestamp = DateTime.UtcNow;
            variable.RolePermissions = addPredefinedRolePermissions();
            if (opcUaServer != null)
            {
                AddPredefinedNode(SystemContext, variable);
            }

            if (FindNodeInAddressSpace(variable.NodeId) != null)
            {
                Console.WriteLine("Node succesfully created with NiD: " + variable.NodeId);
            }
            return variable;
        }


private RolePermissionTypeCollection addPredefinedRolePermissions()
        {
            RolePermissionTypeCollection listPermissions = new RolePermissionTypeCollection();
            var limbo = new RolePermissionType();
            limbo.Permissions = (uint)PermissionType.None;
            limbo.RoleId = Opc.Ua.ObjectIds.WellKnownRole_Observer;
            var user = new RolePermissionType();
            user.Permissions = (uint)(PermissionType.Browse | PermissionType.Read | PermissionType.ReadRolePermissions |
                                  PermissionType.Write);;
            user.RoleId = Opc.Ua.ObjectIds.WellKnownRole_Anonymous;
            var god = new RolePermissionType();
            god.Permissions = (uint)(PermissionType.Browse | PermissionType.Read | PermissionType.ReadRolePermissions |
                                 PermissionType.Write | PermissionType.Call | PermissionType.ReadHistory | PermissionType.ReceiveEvents);
            god.RoleId = Opc.Ua.ObjectIds.WellKnownRole_Supervisor;
            return listPermissions;
        }

然后,我使用单独的UAExpert实例连接到所有三种用户名/连接类型.但是,我设置的角色权限没有任何影响,UAExpert的所有三个实例都可以在 node 上执行相同的操作.我做错了什么?

干杯

推荐答案

对于那些这样做可能会有帮助的人,我找到了一个解决方案:为您想要添加限制的特定事件手动添加侦听器:例如,如果 node x应该只对用户a可读,而不对用户b可读.

x.onreadvalue = checkPermissions; 

checkPermissions{
 if(user == b){
 return baduser} 
 else{
 return value}}

Csharp相关问答推荐

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

实现List T,为什么LINQ之后它不会返回MyList?<>(无法强制转换WhereListIterator `1类型的对象)'

更新产品但丢失产品ASP.NET Core的形象

Blazorise折线图仅绘制数据集的一部分

我的MRG32k3a算法实现返回的数字超出了预期的[0,1]范围

集合表达式没有目标类型

.NET 6:如何防止系统生成的日志(log)?

升级后发出SWITCH语句

当我将`ConcurentDictionary`转换为`IDictionary`时,出现了奇怪的并发行为

在扩展方法中,IEnumerable<;T>;不会转换为IEumerable<;T&>

为什么ReadOnlySpan;T&>没有Slice(...)的重载接受Range实例的?

C#Microsoft.CodeAnalysis.CSharp.Scriiting不等待并行.对于

流畅的验证--如何为属性重用规则?

为什么我的自定义Json.net转换器不工作?

使DefaultIfEmpty返回空

使用C#代码和SQL SERVER中的相同证书签名会产生不同的结果

Excel将';@';添加到具有范围的公式中

如何对列表<;列表>;使用集合表达式?

我什么时候不应该在Dispose中调用EgSuppressFinalize(This)?

C#LINQ多行条件