# ============================================================================
# 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 = *