#
# 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.
#
# ============================================================================
# Failsafe properties-based Realm configuration
#
# A Properties-based configuration is static by nature, which means its user,
# role, and permission definitions contained within do not change during
# runtime.  This means you can't add or remove any of them during runtime
# which is probably of little value to a 'real' application.
#
# This file primarily exists as a failsafe mechanism in case you don't provide
# any Realms to the JSecurity SecurityManager at startup.  It also serves as a
# simple and fun example.  But you will want to provide one or more of your
# own Realms in a real application.
#
# The key/value pairs format is defined in the
# org.jsecurity.realm.text.PropertiesRealm JavaDoc, but it is probably simple
# enough that you could figure it out from looking at the definitions below.
#
# For those that might not understand the references in this file, the
# definitions are all based on the classic Mel Brooks' film "Spaceballs". ;)
# ============================================================================

# ------------------------------
# Users and their assigned roles
# ------------------------------
# user 'root' with password 'secret' and the 'root' role
user.root = secret,root
# user 'guest' with the password 'guest' and the 'guest' role
user.guest = guest,guest
# user 'presidentskroob' with password '12345' ("That's the same combination on my luggage!!!" ;)), and role 'president'
user.presidentskroob = 12345,president
# user 'darkhelmet' with password 'ludicrousspeed' and roles 'darklord' and 'schwartz'
user.darkhelmet = ludicrousspeed,darklord,schwartz
# user 'lonestarr' with password 'vespa' and roles 'goodguy' and 'schwartz'
user.lonestarr = vespa,goodguy,schwartz

# -------------------------------
# Roles with assigned permissions
# -------------------------------
# 'root' role has all permissions, indicated by the wildcard '*'
role.root = *
# The 'schwartz' role can do anything (*) with any lightsaber:
role.schwartz = lightsaber:*
# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with license plate 'eagle5' (instance specific id)
role.goodguy = winnebago:drive:eagle5