Skip to content

Commit

Permalink
change show-draft permissions to be configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
iJungleboy committed Jun 3, 2024
1 parent 04b0214 commit 46ce735
Show file tree
Hide file tree
Showing 8 changed files with 23 additions and 18 deletions.
4 changes: 2 additions & 2 deletions ToSic.Eav.Apps/Eav.Context/Internal/ContextOfApp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ protected virtual IAppIdentity AppIdentity

#region User Permissions / May Edit

AdminPermissions IContextOfUserPermissions.Permissions => _permissions ??= new(UserMayEdit || User.IsContentAdmin, UserMayAdmin);
private AdminPermissions _permissions;
EffectivePermissions IContextOfUserPermissions.Permissions => _permissions ??= new(isSiteAdmin: UserMayAdmin, isContentAdmin: UserMayEdit || User.IsContentAdmin);
private EffectivePermissions _permissions;

private bool UserMayEdit => _userMayEditGet.Get(() => Log.GetterM(() =>
{
Expand Down
5 changes: 3 additions & 2 deletions ToSic.Eav.Apps/Eav.Context/Internal/ContextOfSite.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,9 @@ protected ContextOfSite(MyServicesBase<MyServices> services, string logName) : b
return u.IsSystemAdmin || u.IsSiteAdmin || u.IsSiteDeveloper;
});

AdminPermissions IContextOfUserPermissions.Permissions => _permissions ??= UserMayAdmin.Map(mayAdmin => new AdminPermissions(mayAdmin || (User?.IsContentAdmin ?? false), mayAdmin));
private AdminPermissions _permissions;
EffectivePermissions IContextOfUserPermissions.Permissions => _permissions
??= UserMayAdmin.Map(mayAdmin => new EffectivePermissions(isSiteAdmin: mayAdmin, isContentAdmin: mayAdmin || (User?.IsContentAdmin ?? false)));
private EffectivePermissions _permissions;

/// <inheritdoc />
public IContextOfSite Clone(ILog parentLog) => new ContextOfSite(Services, Log.NameId).LinkLog(parentLog);
Expand Down
8 changes: 4 additions & 4 deletions ToSic.Eav.Core/Context/ContextOfUserPermissions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ namespace ToSic.Eav.Context;
/// </summary>
internal class ContextOfUserPermissions(IUser user) : ServiceBase("Eav.CtxSec"), IContextOfUserPermissions
{
AdminPermissions IContextOfUserPermissions.Permissions => _permissions ??= GetPermissions();
private AdminPermissions _permissions;
EffectivePermissions IContextOfUserPermissions.Permissions => _permissions ??= GetPermissions();
private EffectivePermissions _permissions;

private AdminPermissions GetPermissions()
private EffectivePermissions GetPermissions()
{
var userIsSiteAdmin = UserMayAdmin();
var isContentAdmin = userIsSiteAdmin || (user?.IsContentAdmin ?? false);
return new(isContentAdmin, userIsSiteAdmin);
return new(isSiteAdmin: userIsSiteAdmin, isContentAdmin: isContentAdmin);
}

private bool UserMayAdmin()
Expand Down
2 changes: 1 addition & 1 deletion ToSic.Eav.Core/Context/ContextResolverUserPermissions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
internal class ContextResolverUserPermissions(IContextOfUserPermissions userPermissions)
: IContextResolverUserPermissions
{
public AdminPermissions UserPermissions() => userPermissions.Permissions;
public EffectivePermissions UserPermissions() => userPermissions.Permissions;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,23 @@
/// and this object is used to provide them.
///
/// For better understanding: the user itself has these permissions, but sometimes
/// additional information (eg. an App containing more configuration)
/// additional information (e.g. an App containing more configuration)
/// can extend the permissions. So a provider would then combine that with the user to get more permissions.
/// </summary>
/// <param name="isContentAdmin"></param>
/// <param name="isSiteAdmin"></param>
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public class AdminPermissions(bool isContentAdmin, bool isSiteAdmin)
public class EffectivePermissions(bool isSiteAdmin, bool isContentAdmin, bool isContentEditor, bool showDrafts)
{
public AdminPermissions(bool both) : this(both, both) { }
public EffectivePermissions(bool all) : this(all, all, all, all) { }

public EffectivePermissions(bool isSiteAdmin, bool isContentAdmin) : this(isSiteAdmin, isContentAdmin, isContentAdmin, isContentAdmin) { }

public bool IsContentAdmin { get; } = isContentAdmin;

public bool IsContentEditor { get; } = isContentAdmin;
public bool IsContentEditor { get; } = isContentEditor;

public bool IsSiteAdmin { get; } = isSiteAdmin;

public bool ShowDraftData => IsContentAdmin;
public bool ShowDraftData => showDrafts;
}
2 changes: 1 addition & 1 deletion ToSic.Eav.Core/Context/IContextOfUserPermissions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
public interface IContextOfUserPermissions
{
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
AdminPermissions Permissions { get; }
EffectivePermissions Permissions { get; }
}
2 changes: 1 addition & 1 deletion ToSic.Eav.Core/Context/IContextResolverUserPermissions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public interface IContextResolverUserPermissions
{
AdminPermissions UserPermissions();
EffectivePermissions UserPermissions();
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace ToSic.Eav.DataSources;
DynamicOut = false,
HelpLink = "https://go.2sxc.org/DsPublishingFilter")]

public class PublishingFilter : Eav.DataSource.DataSourceBase
public class PublishingFilter : DataSourceBase
{

#region Configuration-properties
Expand Down Expand Up @@ -54,7 +54,9 @@ private IImmutableList<IEntity> PublishingFilterList()
{
var showDraftsAsSet = ShowDrafts;
var l = Log.Fn<IImmutableList<IEntity>>();
var finalShowDrafts = showDraftsAsSet ?? _userPermissions.UserPermissions()?.IsContentAdmin ?? QueryConstants.ParamsShowDraftsDefault;
var finalShowDrafts = showDraftsAsSet
?? _userPermissions.UserPermissions()?.ShowDraftData
?? QueryConstants.ParamsShowDraftsDefault;
var outStreamName = finalShowDrafts ? StreamDraftsName : StreamPublishedName;
var result = In[outStreamName].List.ToImmutableList();
return l.Return(result, $"showDraftSet:'{showDraftsAsSet}'; final:{finalShowDrafts}; stream: {outStreamName}; count: {result.Count}");
Expand Down

0 comments on commit 46ce735

Please sign in to comment.