################################################################################
#
#    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.
#
################################################################################
#
# This configuration file defines the ACLs for commands in the osgi subshell
#
# This configuration relies on the fact that 'system' bundles need to be managed
# with the
#   -f (--force)
# flag. Operations with -f need admin permission. Most of these operations without
# the 'force' option can be done by a manager.

# The format of this file is as follows:
# The name of the file corresponds to a Configuration Admin PID. This file is for PID:
#    org.apache.karaf.command.acl.osgi
# The prefix org.apache.karaf.command.acl. determines that this file defines ACLs for karaf
# commands. The last word on the PID declares the scope that it applies to, i.e. this file
# is for the 'system' scope.
# Entries in this file map to commands within the defined scope. The simplest role definition
# has the form:
#   command = role1, role2, role3
# Specific roles can also be declared for certain arguments to the command. This is done using
# regular expression matching.
# All the arguments to the command are represented as a list using the following syntax:
#   [arg1,arg2,arg3]
# The matching is done after converting this list into a string. So the line
#   start-level[/.*[0-9][0-9][0-9]+.*/] = manager
# declares that a manager role is needed to set a start level with 3 digits or more. The .*
# wildcards at the beginning and end are used to match the '[' and ']' characters surrounding.
# When looking for a match the regular-expression based ACLs are always checked first. If any
# of them match the associated roles are used.
#
# If no match can be found based on reg-exp ACLs, a match is looked for based purely on the
# command name.
#
# If no command-name match can be found it is assumed that the command does not need a specific
# role and can therefore be invoked by any user.
bundle-level = Deployer, Auditor, Administrator, SuperUser, admin
bundle-level[/.*[-][f].*/] = Administrator,SuperUser,admin
bundle-services = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
bundle-services[/.*[-][f].*/] = Administrator,SuperUser,admin
classes = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
classes[/.*[-][f].*/] = Administrator,SuperUser,admin
find-class = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
find-class[/.*[-][f].*/] = Administrator,SuperUser,admin
headers = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
headers[/.*[-][f].*/] = Administrator,SuperUser,admin
id = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
id[/.*[-][f].*/] = Administrator,SuperUser,admin
list = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
info = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
info[/.*[-][f].*/] = Administrator,SuperUser,admin
ls = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
ls[/.*[-][f].*/] = Administrator,SuperUser,admin
name = Administrator,SuperUser,admin
name[/[^0-9a-zA-Z]*/] = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin 
version = Monitor, Operator, Maintainer,Deployer, Auditor, Administrator, SuperUser, admin
install[/.*[-][f].*/] = Administrator, SuperUser, admin
install = Deployer, Auditor, Administrator, SuperUser, admin
refresh[/.*[-][f].*/] = Administrator,SuperUser,admin
refresh = Deployer, Auditor, Administrator, SuperUser, admin
restart[/.*[-][f].*/] = Administrator, SuperUser, admin
restart = Deployer, Auditor, Administrator, SuperUser, admin
start[/.*[-][f].*/] = Administrator, SuperUser, admin
start = Deployer, Auditor, Administrator, SuperUser, admin
stop[/.*[-][f].*/] = Administrator, SuperUser, admin
stop = Deployer, Auditor, Administrator, SuperUser, admin
uninstall[/.*[-][f].*/] = Administrator, SuperUser, admin
uninstall = Deployer, Auditor, Administrator, SuperUser, admin
update[/.*[-][f].*/] = Administrator, SuperUser, admin
update = Deployer, Auditor, Administrator, SuperUser, admin
watch = Administrator, SuperUser, admin
shutdown = Administrator, SuperUser, admin
start-level[/.*[0-9][0-9][0-9]+.*/] = Deployer, Auditor, Administrator, SuperUser, admin # manager can set startlevels above 100
start-level[/[^0-9]*/] = Monitor, Operator, Maintainer, Deployer, Auditor, Administrator, SuperUser, admin               # viewer can obtain the current start level
start-level = Administrator, SuperUser, admin                           # admin can set any start level, including < 100