Core: added collaborator group and type

This commit is contained in:
Maksim Chegulov 2023-02-17 11:27:27 +03:00
parent e9ed1cf5b2
commit 90fdd58d1c
5 changed files with 65 additions and 35 deletions

View File

@ -39,16 +39,17 @@ public class SubscriptionManager
{
Constants.DocSpaceAdmin.ID,
Constants.Everyone.ID,
Constants.RoomAdmin.ID
Constants.RoomAdmin.ID,
Constants.Collaborator.ID,
};
public SubscriptionManager(CachedSubscriptionService service, TenantManager tenantManager, ICache cache)
{
_service = service ?? throw new ArgumentNullException("subscriptionManager");
_tenantManager = tenantManager;
_cache = cache;
}
}
public void Subscribe(string sourceID, string actionID, string objectID, string recipientID)
{
var s = new SubscriptionRecord
@ -79,7 +80,7 @@ public class SubscriptionManager
_service.SaveSubscription(s);
}
public void Unsubscribe(string sourceID, string actionID, string objectID, string recipientID)
{
var s = new SubscriptionRecord
@ -110,17 +111,17 @@ public class SubscriptionManager
_service.SaveSubscription(s);
}
public void UnsubscribeAll(string sourceID, string actionID, string objectID)
{
_service.RemoveSubscriptions(GetTenant(), sourceID, actionID, objectID);
}
public void UnsubscribeAll(string sourceID, string actionID)
{
_service.RemoveSubscriptions(GetTenant(), sourceID, actionID);
}
public string[] GetSubscriptionMethod(string sourceID, string actionID, string recipientID)
{
IEnumerable<SubscriptionMethod> methods;
@ -144,27 +145,27 @@ public class SubscriptionManager
return m != null ? m.Methods : Array.Empty<string>();
}
public string[] GetRecipients(string sourceID, string actionID, string objectID)
{
return _service.GetRecipients(GetTenant(), sourceID, actionID, objectID);
}
public object GetSubscriptionRecord(string sourceID, string actionID, string recipientID, string objectID)
{
return _service.GetSubscription(GetTenant(), sourceID, actionID, recipientID, objectID);
}
public string[] GetSubscriptions(string sourceID, string actionID, string recipientID, bool checkSubscribe = true)
{
return _service.GetSubscriptions(GetTenant(), sourceID, actionID, recipientID, checkSubscribe);
}
public bool IsUnsubscribe(string sourceID, string recipientID, string actionID, string objectID)
{
return _service.IsUnsubscribe(GetTenant(), sourceID, actionID, recipientID, objectID);
}
public void UpdateSubscriptionMethod(string sourceID, string actionID, string recipientID, string[] senderNames)
{
var m = new SubscriptionMethod
@ -215,5 +216,5 @@ public class SubscriptionManager
private int GetTenant()
{
return _tenantManager.GetCurrentTenant().Id;
}
}
}
}

View File

@ -886,16 +886,23 @@ public class UserManager
}
UserGroupRef r;
if (groupId == Constants.GroupManager.ID || groupId == Constants.GroupUser.ID)
if (groupId == Constants.GroupManager.ID || groupId == Constants.GroupUser.ID || groupId == Constants.GroupCollaborator.ID)
{
var user = refs.TryGetValue(UserGroupRef.CreateKey(Tenant.Id, userId, Constants.GroupUser.ID, UserGroupRefType.Contains), out r) && !r.Removed;
var exists = refs.TryGetValue(UserGroupRef.CreateKey(Tenant.Id, userId, Constants.GroupUser.ID, UserGroupRefType.Contains), out r) && !r.Removed;
if (groupId == Constants.GroupUser.ID)
{
return user;
return exists;
}
exists = refs.TryGetValue(UserGroupRef.CreateKey(Tenant.Id, userId, Constants.GroupCollaborator.ID, UserGroupRefType.Contains), out r) && !r.Removed;
if (groupId == Constants.GroupCollaborator.ID)
{
return exists;
}
if (groupId == Constants.GroupManager.ID)
{
return !user;
return !exists;
}
}

View File

@ -38,4 +38,5 @@ public enum EmployeeType
RoomAdmin = 1,
User = 2,
DocSpaceAdmin = 3,
}
Collaborator = 4,
}

View File

@ -24,9 +24,9 @@
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
using Action = ASC.Common.Security.Authorizing.Action;
using AuthConst = ASC.Common.Security.Authorizing.Constants;
using Action = ASC.Common.Security.Authorizing.Action;
using AuthConst = ASC.Common.Security.Authorizing.Constants;
namespace ASC.Core.Users;
[Singletone]
@ -59,7 +59,7 @@ public sealed class Constants
private readonly IConfiguration _configuration;
#region system group and category groups
#region system group and category groups
public static readonly Guid SysGroupCategoryId = new Guid("{7717039D-FBE9-45ad-81C1-68A1AA10CE1F}");
@ -87,12 +87,19 @@ public sealed class Constants
Name = AuthConst.DocSpaceAdmin.Name,
};
public static readonly GroupInfo GroupCollaborator = new(SysGroupCategoryId)
{
ID = AuthConst.Collaborator.ID,
Name = AuthConst.Collaborator.Name,
};
public static readonly GroupInfo[] BuildinGroups = new[]
{
GroupEveryone,
GroupUser,
GroupManager,
GroupAdmin,
{
GroupEveryone,
GroupUser,
GroupManager,
GroupAdmin,
GroupCollaborator,
};
public static readonly UserInfo LostUser = new UserInfo
@ -119,10 +126,10 @@ public sealed class Constants
Name = "Unknown"
};
#endregion
#endregion
#region authorization rules module to work with users
#region authorization rules module to work with users
public static readonly Action Action_EditUser = new Action(
new Guid("{EF5E6790-F346-4b6e-B662-722BC28CB0DB}"),
@ -136,5 +143,5 @@ public sealed class Constants
new Guid("{1D4FEEAC-0BF3-4aa9-B096-6D6B104B79B5}"),
"Edit categories and groups");
#endregion
}
#endregion
}

View File

@ -65,6 +65,17 @@ public static class UserExtensions
return ui != null && userManager.IsUserInGroup(ui.Id, Constants.GroupUser.ID);
}
public static bool IsCollaborator(this UserManager userManager, UserInfo userInfo)
{
return userInfo != null && userManager.IsUserInGroup(userInfo.Id, Constants.GroupCollaborator.ID);
}
public static bool IsCollaborator(this UserManager userManager, Guid id)
{
var userInfo = userManager.GetUsers(id);
return userManager.IsCollaborator(userInfo);
}
public static bool IsOutsider(this UserManager userManager, Guid id)
{
return userManager.IsUser(id) && id == Constants.OutsideUser.Id;
@ -98,7 +109,10 @@ public static class UserExtensions
public static EmployeeType GetUserType(this UserManager userManager, Guid id)
{
return userManager.IsDocSpaceAdmin(id) ? EmployeeType.DocSpaceAdmin : userManager.IsUser(id) ? EmployeeType.User : EmployeeType.RoomAdmin;
return userManager.IsDocSpaceAdmin(id) ? EmployeeType.DocSpaceAdmin :
userManager.IsUser(id) ? EmployeeType.User :
userManager.IsCollaborator(id) ? EmployeeType.Collaborator :
EmployeeType.RoomAdmin;
}
private const string _extMobPhone = "extmobphone";
@ -146,4 +160,4 @@ public static class UserExtensions
ui.ContactsList = newContacts;
}
}
}