Exemplo n.º 1
0
        private void AddSerializedToDictionary(IPermissionGrantSerialized serialized, IDictionary <string, PermissionsChain> dictionaryToUse)
        {
            var chainName  = serialized.PermissionChain;
            var identifier = serialized.Identifier;

            var tableInstance = dictionaryToUse.ContainsKey(chainName)
                ? dictionaryToUse[chainName]
                : new PermissionsChain(_evaluator);

            if (!_nodeDefinitions.ContainsKey(serialized.NodeKey))
            {
                throw new ArgumentException("No such permission node " + serialized.NodeKey + " in definition list");
            }

            var potentialNode = _nodeDefinitions[serialized.NodeKey];

            dictionaryToUse[chainName] = tableInstance;

            if (serialized.PermissionType == PermissionType.Generic)
            {
                if (potentialNode.PermissionType != PermissionType.Generic)
                {
                    throw new ArgumentException(
                              $"Mismatch in resource/generic node type, was expecting generic for {serialized.NodeKey}");
                }

                var genericToAdd = new GenericPermissionGrant(serialized.GrantType, potentialNode as GenericNode,
                                                              serialized.Index);
                tableInstance.Insert(genericToAdd, identifier);

                return;
            }

            if (potentialNode.PermissionType != PermissionType.ResourceBound)
            {
                throw new ArgumentException(
                          $"Mismatch in resource/generic node type, was expecting resource bound for {serialized.NodeKey}");
            }

            LNode node = null;

            if (!string.IsNullOrEmpty(serialized.ConditionCode))
            {
                node = _parser.ParseConditionCode(serialized.ConditionCode);
            }
            var resourcedToAdd = new ResourcedPermissionGrant <IPermissionManaged>(
                serialized.GrantType, (IResourceNode)potentialNode, node, serialized.Index
                );

            tableInstance.Insert(resourcedToAdd, identifier);
        }
Exemplo n.º 2
0
 public void InsertSerialized(IPermissionGrantSerialized serialized)
 {
     AddSerializedToDictionary(serialized, Chains);
 }