private static function userFeatureExistsRole(string $role, string $feature_code, $module_id = null) : int {
		if (!empty(\Object\Controller::$cached_roles[$role]['features'])) {
			$result = self::userFeatureExistsOne(\Object\Controller::$cached_roles[$role]['features'], $feature_code, $module_id);
			if ($result == 1) {
				return true;
			} else if ($result == 2) { // disabled feature
				return false;
			}
		}
		// super admin
		if (!empty(\Object\Controller::$cached_roles[$role]['super_admin'])) {
			if (empty(\Object\Controller::$cached_features[$feature_code]['prohibitive'])) {
				return 1;
			}
		}
		// if permission is not found we need to check parents
		if (empty(\Object\Controller::$cached_roles[$role]['parents'])) return 0;
		// go though parents
		foreach (\Object\Controller::$cached_roles[$role]['parents'] as $k => $v) {
			if (!empty($v)) continue;
			$result = self::userFeatureExistsRole($k, $feature_code, $module_id);
			if ($result === 1) {
				return 1;
			} else if ($result === 2) {
				return 2;
			}
		}
		return 0;
	}
private static function userFeatureExistsRole(string $role, string $feature_code, $module_id = null) : int {
		if (!empty(\Object\Controller::$cached_roles[$role]['features'])) {
			$result = self::userFeatureExistsOne(\Object\Controller::$cached_roles[$role]['features'], $feature_code, $module_id);
			if ($result == 1) {
				return true;
			} else if ($result == 2) { // disabled feature
				return false;
			}
		}
		// super admin
		if (!empty(\Object\Controller::$cached_roles[$role]['super_admin'])) {
			if (empty(\Object\Controller::$cached_features[$feature_code]['prohibitive'])) {
				return 1;
			}
		}
		// if permission is not found we need to check parents
		if (empty(\Object\Controller::$cached_roles[$role]['parents'])) return 0;
		// go though parents
		foreach (\Object\Controller::$cached_roles[$role]['parents'] as $k => $v) {
			if (!empty($v)) continue;
			$result = self::userFeatureExistsRole($k, $feature_code, $module_id);
			if ($result === 1) {
				return 1;
			} else if ($result === 2) {
				return 2;
			}
		}
		return 0;
	}
private static function userFeatureExistsRole ( string $ role , string $ feature_code , $ module_id = null ) : int { if ( ! empty ( \ Object \ Controller :: $ cached_roles [ $ role ] [ 'features' ] ) ) { $ result = self :: userFeatureExistsOne ( \ Object \ Controller :: $ cached_roles [ $ role ] [ 'features' ] , $ feature_code , $ module_id ) ; if ( $ result == 1 ) { return true ; } else if ( $ result == 2 ) { // disabled feature return false ; } } // super admin if ( ! empty ( \ Object \ Controller :: $ cached_roles [ $ role ] [ 'super_admin' ] ) ) { if ( empty ( \ Object \ Controller :: $ cached_features [ $ feature_code ] [ 'prohibitive' ] ) ) { return 1 ; } } // if permission is not found we need to check parents if ( empty ( \ Object \ Controller :: $ cached_roles [ $ role ] [ 'parents' ] ) ) return 0 ; // go though parents foreach ( \ Object \ Controller :: $ cached_roles [ $ role ] [ 'parents' ] as $ k => $ v ) { if ( ! empty ( $ v ) ) continue ; $ result = self :: userFeatureExistsRole ( $ k , $ feature_code , $ module_id ) ; if ( $ result === 1 ) { return 1 ; } else if ( $ result === 2 ) { return 2 ; } } return 0 ; }
User feature exists one role

@param string $role
@param string $feature_code
@param int $module_id
@return int
User feature exists one role