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;
	}