DocSpace-buildtools/common/ASC.Common/Security/Authorizing/AzObjectSecurityProviderHelper.cs

65 lines
1.9 KiB
C#
Raw Normal View History

namespace ASC.Common.Security.Authorizing;
2019-05-15 14:56:09 +00:00
public class AzObjectSecurityProviderHelper
{
public ISecurityObjectId CurrentObjectId { get; private set; }
public bool ObjectRolesSupported => _currSecObjProvider != null && _currSecObjProvider.ObjectRolesSupported;
2019-05-15 14:56:09 +00:00
private readonly SecurityCallContext _callContext;
private readonly bool _currObjIdAsProvider;
private ISecurityObjectProvider _currSecObjProvider;
2019-05-15 14:56:09 +00:00
public AzObjectSecurityProviderHelper(ISecurityObjectId objectId, ISecurityObjectProvider secObjProvider)
2022-03-09 17:15:51 +00:00
{
ArgumentNullException.ThrowIfNull(objectId);
_currObjIdAsProvider = false;
2022-03-09 17:15:51 +00:00
CurrentObjectId = objectId;
_currSecObjProvider = secObjProvider;
2019-05-15 14:56:09 +00:00
if (_currSecObjProvider == null && CurrentObjectId is ISecurityObjectProvider securityObjectProvider)
2019-05-15 14:56:09 +00:00
{
_currObjIdAsProvider = true;
_currSecObjProvider = securityObjectProvider;
2019-05-15 14:56:09 +00:00
}
_callContext = new SecurityCallContext();
}
public IEnumerable<IRole> GetObjectRoles(ISubject account)
{
var roles = _currSecObjProvider.GetObjectRoles(account, CurrentObjectId, _callContext);
foreach (var role in roles)
{
2022-02-08 11:07:28 +00:00
if (!_callContext.RolesList.Contains(role))
{
_callContext.RolesList.Add(role);
}
2019-05-15 14:56:09 +00:00
}
return roles;
}
public bool NextInherit()
{
2022-02-08 11:07:28 +00:00
if (_currSecObjProvider == null || !_currSecObjProvider.InheritSupported)
{
return false;
}
CurrentObjectId = _currSecObjProvider.InheritFrom(CurrentObjectId);
2022-02-08 11:07:28 +00:00
if (CurrentObjectId == null)
{
return false;
}
2022-02-08 11:07:28 +00:00
if (_currObjIdAsProvider)
{
_currSecObjProvider = CurrentObjectId as ISecurityObjectProvider;
}
_callContext.ObjectsStack.Insert(0, CurrentObjectId);
return _currSecObjProvider != null;
2019-05-15 14:56:09 +00:00
}
}