swapnil-verma-gl 4357fe9c08
[ACS-8694] Re-introduce visibility rules cleanup (#4516)
* [ACS-8694] Cleanup of visibility rules for extensions in ACA (#4140)

* [ACS-9369] Resolved issues where visibility rules with a single element array would log errors (#4416)

* [ACS-9369] Resolved issues where visibility rules with a single element array would log errors

* [ACS-9369] Improved rule array filtering logic

* [ACS-9369] Added type to variable

(cherry picked from commit 4e33f1126da07cf18c1896f7e839336e493b12cb)

* [ACS-8694] Removed unneeded test cases

* [ACS-8694] Fixed 'Favorite' option showing up in toolbar when opening search page
2025-05-15 10:44:00 +02:00

4.5 KiB

Title
Title
Legacy Rules for ACA

Legacy rules

Below is a list of all unused rules that were removed with ACA 5.1.1. You may use them as a reference in case your application/extension is still dependent on them, however we do advise that you revisit those implementations and substitute them with a different approach, since these rules will no longer be supported.

/**
 * app.selection.file.canLock
 * Checks if user can lock selected file.
 */
export const canLockFile = (context: RuleContext): boolean => !isWriteLocked(context) && canUpdateSelectedNode(context);

/**
 * app.selection.file.canUnlock
 * Checks if user can unlock selected file.
 */
export function canUnlockFile(context: RuleContext): boolean {
  const { file } = context.selection;
  return isWriteLocked(context) && (context.permissions.check(file?.entry, ['delete']) || isUserWriteLockOwner(context));
}

/**
 * app.selection.file.isLockOwner
 * Checks if the selected file has **write** or **read-only** locks specified,
 * and that current user is the owner of the lock.
 */
export const isUserWriteLockOwner = (context: RuleContext): boolean =>
  isWriteLocked(context) &&
  context.selection.file?.entry.properties['cm:lockOwner'] &&
  context.selection.file?.entry.properties['cm:lockOwner'].id === context.profile.id;

/**
 * app.selection.file.canShare
 * Checks if user can share selected file.
 */
export const canShareFile = (context: RuleContext): boolean =>
  [context.selection.file, navigation.isNotTrashcan(context), repository.hasQuickShareEnabled(context), !isShared(context)].every(Boolean);

/**
 * app.selection.canUnshare
 * Checks if user can un-share selected nodes.
 */
export function canUnshareNodes(context: RuleContext): boolean {
  if (hasSelection(context)) {
    return context.permissions.check(context.selection.nodes, ['delete'], {
      target: 'allowableOperationsOnTarget'
    });
  }
  return false;
}

/**
 * app.selection.file.isShared
 * Checks if the selected file is already shared.
 */
export function isShared(context: RuleContext): boolean {
  if (navigation.isSharedFiles(context) && context.selection.file) {
    return true;
  }

  if (navigation.isNotTrashcan(context) && hasSelection(context) && context.selection.file) {
    return !!context.selection.file.entry?.properties?.['qshare:sharedId'];
  }

  return false;
}

/**
 * app.selection.isPrivateLibrary
 * Checks if user has selected a **private** library (site)
 */
export function isPrivateLibrary(context: RuleContext): boolean {
  return context.selection.library?.entry?.visibility === 'PRIVATE';
}

/**
 * app.selection.hasNoLibraryRole
 * Checks if the selected library has no **role** property defined.
 */
export const hasNoLibraryRole = (context: RuleContext): boolean => !hasLibraryRole(context);

/**
 * app.navigation.isLibraryFiles
 * Checks if a **Library Files** route is activated.
 */
export function isLibraryFiles(context: RuleContext): boolean {
  const { url } = context.navigation;
  return url?.startsWith('/libraries');
}

/**
 * app.navigation.isPersonalFiles
 * Checks if a **Personal Files** route is activated.
 */
export function isPersonalFiles(context: RuleContext): boolean {
  const { url } = context.navigation;
  return url?.startsWith('/personal-files');
}

/**
 * app.navigation.isSharedPreview
 * Checks if a **Shared Preview** route is activated.
 */
export function isSharedPreview(context: RuleContext): boolean {
  const { url } = context.navigation;
  return url?.startsWith('/shared/preview/') || (url?.startsWith('/shared') && url?.includes('viewer:view'));
}

/**
 * app.navigation.isFavoritesPreview
 * Checks if a **Favorites Preview** route is activated.
 */
export function isFavoritesPreview(context: RuleContext): boolean {
  const { url } = context.navigation;
  return url?.startsWith('/favorites/preview/') || (url?.startsWith('/favorites') && url?.includes('viewer:view'));
}

/**
 * app.navigation.isSharedFileViewer
 * Checks if a **Shared File Preview** route is activated.
 */
export function isSharedFileViewer(context: RuleContext): boolean {
  const { url } = context.navigation;
  return url?.startsWith('/preview/s/');
}

/**
 * repository.isQuickShareEnabled
 * Checks if the quick share repository option is enabled or not.
 */
export const hasQuickShareEnabled = (context: RuleContext): boolean => context.repository.status.isQuickShareEnabled;

/**
 * user.isAdmin
 * Checks if user is admin.
 */
export const isAdmin = (context: RuleContext): boolean => context.profile.isAdmin;