HEX
Server: nginx/1.18.0
System: Linux iZj6c1ieg2jrpk1z5tzi19Z 6.3.9-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 21 22:18:40 EDT 2023 x86_64
User: www (1001)
PHP: 8.2.4
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.cytocare.cn/wp-content/plugins/wedocs/includes/Capability.php
<?php

namespace WeDevs\WeDocs;

/**
 * Post type class
 */
class Capability {
    /**
     * Initialize the class
     */
    public function __construct() {
        add_filter( 'user_has_cap', array( $this, 'grant_delete_capability_to_specific_roles' ), 10, 4 );
    }

    /**
	 * Grant doc delete capabilities to Admin, Editor and
	 * weDocs-pro global permission given roles.
	 *
	 * @param array $all_caps An array of all the user's capabilities.
	 * @param array $caps    Actual capabilities for meta capability.
	 * @param array $args    Optional parameters passed to has_cap(), typically object ID.
	 * @param WP_User $user
     *
	 * @return array
	 */
    public function grant_delete_capability_to_specific_roles( $all_caps, $caps, $args, $user ) {
        if ( ! isset( $_GET['post'] ) || 'docs' !== get_post_type( absint( $_GET['post'] ) ) ) {
			return $all_caps;
		}

        $permitted_roles = array( 'administrator', 'editor' );
        $delete_caps     = array(
            'delete_published_docs' => true,
			'delete_docs' => true,
            'delete_others_docs' => true,
            'delete_private_docs' => true,
        );

		if ( empty( array_intersect( array_keys( $delete_caps ), $caps ) ) ) {
            return $all_caps;
        }

        if ( wedocs_pro_exists() ) {
            $permitted_roles = wedocs_get_permission_settings( 'global_permission', [ 'administrator', 'editor' ] );
        }

        $has_role = array_intersect( $user->roles, $permitted_roles );
        
        if ( ! empty( $user->roles ) && ! empty( $has_role ) ) {
            $all_caps = array_merge( $all_caps, $delete_caps );
        }

        return $all_caps;
    }
}