[
https://issues.apache.org/jira/browse/CLOUDSTACK-8562?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15249647#comment-15249647
]
ASF GitHub Bot commented on CLOUDSTACK-8562:
--------------------------------------------
Github user bhaisaab commented on a diff in the pull request:
https://github.com/apache/cloudstack/pull/1489#discussion_r60388741
--- Diff: api/src/org/apache/cloudstack/acl/Rule.java ---
@@ -0,0 +1,65 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.cloudstack.acl;
+
+import com.cloud.exception.InvalidParameterValueException;
+import com.google.common.base.Strings;
+
+import java.util.regex.Pattern;
+
+public final class Rule {
+ private final String rule;
+ private final static Pattern ALLOWED_PATTERN =
Pattern.compile("^[a-zA-Z0-9*]+$");
+
+ public Rule(final String rule) {
+ validate(rule);
+ this.rule = rule;
+ }
+
+ public boolean matches(final String commandName) {
+ if (Strings.isNullOrEmpty(commandName)) {
+ return false;
+ }
+ if (isWildcard()) {
+ if (commandName.matches(rule.replace("*", "\\w*"))) {
+ return true;
+ }
+ } else {
+ if (commandName.equalsIgnoreCase(rule)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isWildcard() {
+ return rule.contains("*");
+ }
+
+ @Override
+ public String toString() {
+ return rule;
+ }
+
+ private static boolean validate(final String rule) throws
InvalidParameterValueException {
+ if (Strings.isNullOrEmpty(rule) ||
!ALLOWED_PATTERN.matcher(rule).matches()) {
+ throw new InvalidParameterValueException("Invalid rule
provided. Only API names and wildcards are allowed.");
+ }
+ return true;
--- End diff --
@jburwell I've refactored and move all rule related methods in this class
and added more unit tests. The rule itself is immutable only compo-sable by the
constructor.
> User Definable Roles
> --------------------
>
> Key: CLOUDSTACK-8562
> URL: https://issues.apache.org/jira/browse/CLOUDSTACK-8562
> Project: CloudStack
> Issue Type: New Feature
> Security Level: Public(Anyone can view this level - this is the
> default.)
> Components: Management Server
> Reporter: Paul Angus
> Assignee: Rohit Yadav
>
> Static command.properties moved to database and made user definable
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)