Roles. Administrators always pass. */ class Caps { public static function all() { return apply_filters( 'frontglut_capabilities', array( 'frontglut_access_dashboard' => __( 'Access the frontend dashboard', 'frontglut' ), 'frontglut_manage_posts' => __( 'Submit and manage own posts', 'frontglut' ), 'frontglut_publish_posts' => __( 'Publish posts directly (skip moderation)', 'frontglut' ), 'frontglut_moderate' => __( 'Moderate submissions of other users', 'frontglut' ), 'frontglut_upload_files' => __( 'Upload files / media', 'frontglut' ), 'frontglut_manage_files' => __( 'Manage the file explorer', 'frontglut' ), 'frontglut_manage_products' => __( 'Manage products', 'frontglut' ), 'frontglut_manage_orders' => __( 'Manage orders', 'frontglut' ), 'frontglut_manage_coupons' => __( 'Manage coupons', 'frontglut' ), 'frontglut_view_reports' => __( 'View reports', 'frontglut' ), 'frontglut_manage_customers' => __( 'View customers (CRM)', 'frontglut' ), 'frontglut_manage_reviews' => __( 'Moderate product reviews', 'frontglut' ), 'frontglut_manage_vendors' => __( 'Manage vendors, commissions, withdrawals', 'frontglut' ), 'frontglut_is_vendor' => __( 'Is a vendor (own store)', 'frontglut' ), 'frontglut_send_notices' => __( 'Send announcements', 'frontglut' ), 'frontglut_manage_tickets' => __( 'Answer support tickets', 'frontglut' ), 'frontglut_manage_settings' => __( 'Manage FrontGlut settings', 'frontglut' ), ) ); } /** * Capabilities a role may have and still be given to people who sign themselves up * (frontend registration and social login). Anything beyond this, e.g. publishing, editing * others' content, managing the shop or users, makes the role unavailable for self-registration. */ public static function self_registration_caps() { return apply_filters( 'frontglut_self_registration_caps', array( 'read', 'level_0', 'level_1', 'edit_posts', 'delete_posts', 'frontglut_access_dashboard', 'frontglut_manage_posts', 'frontglut_upload_files' ) ); } /** Roles that are safe to assign on self-registration: role slug => translated name. */ public static function registration_roles() { $safe = self::self_registration_caps(); $out = array(); foreach ( wp_roles()->roles as $slug => $r ) { $granted = array_keys( array_filter( isset( $r['capabilities'] ) ? (array) $r['capabilities'] : array() ) ); if ( 'administrator' !== $slug && ! array_diff( $granted, $safe ) ) { $out[ $slug ] = translate_user_role( $r['name'] ); } } return $out; } /** The configured self-registration role if it is safe, otherwise subscriber (or customer with WooCommerce). */ public static function registration_role( $role ) { $roles = self::registration_roles(); if ( is_string( $role ) && isset( $roles[ $role ] ) ) { return $role; } return class_exists( 'WooCommerce' ) && isset( $roles['customer'] ) ? 'customer' : 'subscriber'; } public static function can( $cap, $user_id = 0 ) { $user_id = $user_id ? $user_id : get_current_user_id(); if ( ! $user_id ) { return false; } if ( user_can( $user_id, 'manage_options' ) ) { return true; } return user_can( $user_id, $cap ); } /** Default grants applied on activation (only adds, never removes). */ public static function defaults() { return array( 'administrator' => array_keys( self::all() ), 'shop_manager' => array( 'frontglut_access_dashboard', 'frontglut_manage_posts', 'frontglut_upload_files', 'frontglut_manage_files', 'frontglut_manage_products', 'frontglut_manage_orders', 'frontglut_manage_coupons', 'frontglut_view_reports', 'frontglut_manage_customers', 'frontglut_manage_reviews', 'frontglut_manage_tickets' ), 'editor' => array( 'frontglut_access_dashboard', 'frontglut_manage_posts', 'frontglut_publish_posts', 'frontglut_moderate', 'frontglut_upload_files', 'frontglut_manage_files', 'frontglut_send_notices' ), 'author' => array( 'frontglut_access_dashboard', 'frontglut_manage_posts', 'frontglut_publish_posts', 'frontglut_upload_files' ), 'contributor' => array( 'frontglut_access_dashboard', 'frontglut_manage_posts', 'frontglut_upload_files' ), 'subscriber' => array( 'frontglut_access_dashboard' ), 'customer' => array( 'frontglut_access_dashboard' ), ); } public static function grant_defaults() { foreach ( self::defaults() as $role => $caps ) { $r = get_role( $role ); if ( ! $r ) { continue; } foreach ( $caps as $cap ) { $r->add_cap( $cap ); } } } public static function remove_all() { foreach ( wp_roles()->role_objects as $role ) { foreach ( array_keys( self::all() ) as $cap ) { $role->remove_cap( $cap ); } } } }