Example #1
0
        /// <summary>
        /// Get the the permission for this collection by a given identity.
        /// </summary>
        /// <returns>The permission the identity has over the given collection</returns>
        public void SetPermission(TType collection, TIdentity identity, ReadWritePermission permission)
        {
            SetKeys(collection);
            SetKeys(identity);

            // Remove the collection from the list, unless we're the owners, in that case, just set it to no permission.
            if (permission == ReadWritePermission.None && identity.Equals(collection.owner) == false)
            {
                _collectionToIdentity[collection].Remove(identity);
                _identityToCollection[identity].Remove(new PermissionModel <TType>(collection, ReadWritePermission.None));
            }
            else
            {
                _collectionToIdentity[collection].Add(identity);

                var c     = _identityToCollection[identity];
                var model = new PermissionModel <TType>(collection, permission);

                // The equality operator ignores the permission on the PermissionModel object, however,
                // the HashSet<T> doesn't update a value if the equality operator considers the object equal.
                // Because of this the model is never set in the hashset; The only work around I could find was removing and re-adding.
                c.Remove(model);
                c.Add(model);
            }

            // Notify event listeners
            if (_eventHandlers.ContainsKey(identity))
            {
                foreach (var d in _eventHandlers[identity])
                {
                    d(new PermissionChangedResult <TType, TIdentity>(collection, identity, permission));
                }
            }
        }
        public void TargetRpc_SetCollectionPermission(Guid collectionGuid, ReadWritePermission permission)
        {
            var collection = PUN2ActionsBridge.collectionFinder.GetClientCollection(collectionGuid);

            if (collection == null)
            {
                collection = PUN2ActionsBridge.collectionFinder.GetClientCurrencyCollection(collectionGuid);
            }

            if (collection != null)
            {
                PUN2PermissionsRegistry.collections.SetPermission(collection, bridge.photonView, permission);

                // NOTE: If we're setting permission to none AND we're not the owner of the collection just remove it from our registry.
                // NOTE: The server will have to re-send the collection to the client once the client interacts with it.
                if (permission == ReadWritePermission.None && collection.owner != bridge.photonView)
                {
                    collection.UnRegister();
                }

                logger.Log($"[Client] Set collection {collectionGuid} permission to {permission} with ViewId: {bridge.photonView.ViewID}", bridge);
            }
            else
            {
                logger.Warning($"[Client] Collection with guid: {collectionGuid} not found. Can't set permission", bridge);
            }
        }
Example #3
0
        private void TargetRpc_SetCollectionPermission(byte[] collectionGuidBytes, ReadWritePermission permission)
        {
            Guid collectionGuid = new Guid(collectionGuidBytes);

            logger.Log($"[TargetRpc][ViewId: {this.photonView.ViewID}] {nameof(TargetRpc_SetCollectionPermission)}(collectionGuid: {collectionGuid}, permission: {permission})", this);

            collectionReplicator.TargetRpc_SetCollectionPermission(collectionGuid, permission);
        }
Example #4
0
        private bool CheckItemPermission(PhotonView identity, System.Guid itemGuid, ReadWritePermission minimalPermission, out INetworkItemInstance outItem)
        {
            outItem = ServerItemRegistry.Get(itemGuid) as INetworkItemInstance;
            if (outItem?.collectionEntry?.collection == null)
            {
                return(false);
            }

            if (CheckCollectionPermission(identity, outItem.collectionEntry.collection, minimalPermission) == false)
            {
                return(false);
            }

            return(true);
        }
Example #5
0
        public void Server_SetCollectionPermissionOnServer(Guid collectionGuid, ReadWritePermission permission)
        {
            if (!PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                return;
            }

            logger.Log($"[Server][ViewId: {this.photonView.ViewID}] {nameof(Server_SetCollectionPermissionOnServer)}(collectionGuid: {collectionGuid}, permission: {permission})", this);

            var col = collectionFinder.GetServerCollection(collectionGuid);

            if (col != null)
            {
                Server_SetCollectionPermissionOnServer(col, permission);
            }
        }
Example #6
0
        private bool CheckCollectionPermission(PhotonView identity, ICollection collection, ReadWritePermission minimalPermission)
        {
            var c = collection as IPUN2Collection;

            if (c == null)
            {
                return(false);
            }

            // Make sure the player has read/write access on the collection the item is in.
            var permission = PUN2PermissionsRegistry.collections.GetPermission(c, identity);

            if (permission < minimalPermission)
            {
                return(false);
            }

            return(true);
        }
Example #7
0
        private void DrawCollection(IUNetCollection collection, ReadWritePermission permission, IEnumerable <NetworkIdentity> identities)
        {
            var col = collection as ICollection;

            if (collection == null || col == null)
            {
                return;
            }

            using (new VerticalLayoutBlock("box"))
            {
                EditorGUILayout.LabelField(new GUIContent("Collection Name"), new GUIContent(collection.collectionName), UnityEditor.EditorStyles.boldLabel);
                EditorGUILayout.LabelField(new GUIContent("GUID"), new GUIContent(collection.ID.ToString()));
                EditorGUILayout.LabelField(new GUIContent("Permissions"), new GUIContent(permission.ToString()));
                EditorGUILayout.LabelField(new GUIContent("Type"), new GUIContent(GetFriendlyName(collection.GetType())));
                EditorGUILayout.LabelField(new GUIContent("Slot count"), new GUIContent(col.slotCount.ToString()));
                EditorGUILayout.LabelField(new GUIContent("Owner NetID"), new GUIContent(collection.owner.netId.ToString()));

                if (identities.Any())
                {
                    using (new VerticalLayoutBlock("box"))
                    {
                        EditorGUILayout.LabelField(new GUIContent("All identities with access"));
                        foreach (var identity in identities)
                        {
                            if (identity == null)
                            {
                                EditorGUILayout.LabelField("<NULL RECORD>");
                                continue;
                            }

                            EditorGUILayout.BeginHorizontal();

                            if (identity == collection.owner)
                            {
                                GUI.color = Color.green;
                            }

                            EditorGUILayout.LabelField(new GUIContent(identity.name), GUILayout.Width(150f));
                            EditorGUILayout.LabelField(new GUIContent("NetID: " + identity.netId), GUILayout.Width(80f));
                            EditorGUILayout.LabelField(new GUIContent(UNetPermissionsRegistry.collections.GetPermission(collection, identity).ToString()), GUILayout.Width(100));
                            if (GUILayout.Button("Select", "minibutton"))
                            {
                                Selection.activeObject = identity.gameObject;
                            }

                            GUI.color = Color.white;

                            EditorGUILayout.EndHorizontal();
                        }
                    }
                }


                EditorGUILayout.BeginHorizontal();
                if (GUILayout.Button("Select"))
                {
                    Selection.activeGameObject = collection.owner?.gameObject;
                }
                if (GUILayout.Button("Inspect"))
                {
                    CollectionInspectorEditor.ShowWindow();
                    CollectionInspectorEditor.collectionNameOrGuid = collection.ID.ToString();
                }
                EditorGUILayout.EndHorizontal();
            }
        }
Example #8
0
 private void DrawCollection(IUNetCollection collection, ReadWritePermission permission)
 {
     DrawCollection(collection, permission, new List <NetworkIdentity>());
 }
 private void DrawCollection(IPUN2Collection collection, ReadWritePermission permission)
 {
     DrawCollection(collection, permission, new List <PhotonView>());
 }
 public PermissionChangedResult(TType obj, TIdentity identity, ReadWritePermission permission)
 {
     this.obj        = obj;
     this.identity   = identity;
     this.permission = permission;
 }
Example #11
0
        public void Server_SetCollectionPermissionOnServer(IPUN2Collection collection, ReadWritePermission permission)
        {
            if (!PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                return;
            }

            logger.Log($"[Server][ViewId: {this.photonView.ViewID}] {nameof(Server_SetCollectionPermissionOnServer)}(collection: ({collection.collectionName}, {collection.ID}), permission: {permission})", this);

            PUN2PermissionsRegistry.collections.SetPermission(collection, this.photonView, permission);
        }
Example #12
0
        public void Server_SetCollectionPermissionOnServerAndClient(Guid collectionGuid, ReadWritePermission permission)
        {
            if (!PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                return;
            }

            logger.Log($"[Server][ViewId: {this.photonView.ViewID}] {nameof(Server_SetCollectionPermissionOnServerAndClient)}(collectionGuid: {collectionGuid}, permission: {permission})", this);

            Server_SetCollectionPermissionOnServer(collectionGuid, permission);

            this.photonView.RPC(nameof(TargetRpc_SetCollectionPermission), this.photonView.Owner, collectionGuid.ToByteArray(), permission);
        }
 public void Server_SetCollectionPermissionOnServer(IUNetCollection collection, ReadWritePermission permission)
 {
     UNetPermissionsRegistry.collections.SetPermission(collection, identity, permission);
     logger.Log($"[Server] Set client's permission to {permission} for collection {collection.collectionName} and guid {collection.ID} on netID: {netId}", this);
 }
Example #14
0
 public PermissionModel(T obj, ReadWritePermission permission)
 {
     this.obj = obj;
     this.permission = permission;
 }
Example #15
0
        protected bool CheckCollectionPermission(NetworkIdentity identity, ICollection collection, ReadWritePermission minimalPermission)
        {
            var c = collection as IUNetCollection;

            if (c == null)
            {
                return(false);
            }

            // Make sure the player has read/write access on the collection the item is in.
            var permission = UNetPermissionsRegistry.collections.GetPermission(c, identity);

            if (permission < minimalPermission)
            {
                return(false);
            }

            return(true);
        }
 public static bool CanRead(this ReadWritePermission permission)
 {
     return(permission.HasFlag(ReadWritePermission.Read));
 }