/// <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); } }
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); }
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); }
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); } }
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); }
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(); } }
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; }
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); }
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); }
public PermissionModel(T obj, ReadWritePermission permission) { this.obj = obj; this.permission = permission; }
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)); }