local help = [[
General User Management Concepts:
User access is driven by ULib's Control List (UCL).
This list contains users and groups which in turn contains lists of allowed and denied accesses.
The allow and deny lists contain access strings like "ulx slap" or "ulx phygunplayer" to show
what a user and/or group does and does not have access to.
If a user has "ulx slap" in their user allow list or in the allow list of one of the groups
they belong to, they have access to slap.
If a user has "ulx slap" in their user deny list they are DENIED the command,
even if they have the command in one of their group's allow lists.
In this way, deny takes precedence over allow.

ULib supports immunity by being able to specify what various users and groups are allowed to target.
This is often used to make it so lower admins cannot target higher admins.
EG, by default admins can't target superadmins, but superadmins can still target admins.


More Advanced Concepts:
Groups have inheritance. You can specify what group they inherit from in the addgroup command.
If a user is in a group that has inheritance, UCL will check all groups connected in the inheritance chain.
Note that groups do not support deny lists for the sake of simplicity.
If you feel that a group needs to be denied something, you should split your groups up instead.

The "user" group applies to everyone who does not otherwise belong in a group.
You can use groupallow on this group just like any other, just remember that everyone is being allowed access.

ULib supports an advanced, highly configurable permission system by using "access tags".
Access tags specify what a user is allowed to pass as arguments to a command.
For example, you can make it so that admins are only allowed to slay users with "killme" somewhere in their name,
or you can give everyone access to the "ulx teleport" command, but only allow them to teleport themselves.

Examples of using access tags are given below in the userallow and groupallow commands.
The format for access tags is as follows.
Each argument that is passed to the command can be limited by the access tag.
Each argument being limited must be listed in the same order as in the command, separated by spaces.
If you don't want to limit an argument, use a star ("*").
EG, to limit "ulx slap" damage to 0 through 10, but still allow it to be used on anyone, use the tag "* 0:10".

User Management Commands:

ulx adduser <user> <group> - Add the specified CONNECTED player to the specified group.
The group MUST exist for this command to succeed.
Use admin, superadmin or see ulx addgroup.
You can only specify one group. See above for explanation on immunity.

Ex 1. ulx adduser "syntek" superadmin                    -- This will add the connected "syntek" as a superadmin
Ex 2. ulx adduser "mcNuggets" owner                      -- This will add the connected "mcNuggets" to the group owner
on the condition that the group exists

ulx removeuser <user> - Remove the specified connected player from the permanent access list.

Ex 1. ulx removeuser "Strudi"                           -- This removes the user "Strudi"

ulx userallow <user> <access> [<access tag>] - Puts the access on the USER'S ALLOW list, with optional access tag (see above)
See above for explanation of allow list vs. deny list, as well as how access strings/tags work.

Ex 1. ulx userallow "Kermit" "ulx slap"                 -- This grants the user access to "ulx slap"
Ex 2. ulx userallow "Kermit" "ulx slap" "!%admin 0"     -- This grants the user access to "ulx slap"
But they can only slap users lower than an admin, and they can only slap for 0 damage

ulx userdeny <user> <access> [<revoke>] - Removes a player's access.
If revoke is set to true, this simply removes the access string from the user's allow/deny lists
instead of adding it to the user's deny list.
See above for an explanation on the deny list.

ulx addgroup <group> [<inherits from>] - Creates a group, optionally inheriting from the specified group.
See above for explanation on inheritance.

ulx removegroup <group> - Removes a group PERMANENTLY.
Also removes the group from all connected users and all users who connect in the future.
If a user has no group besides this, they will become guests. Please be VERY careful with this command!

ulx renamegroup <current group> <new group> - Renames a group.

ulx setgroupcantarget <group> [<target string>] - Limits what users a group can target.
Pass no argument to clear the restriction.

Ex 1. ulx setgroupcantarget user !%admin                 -- Guests cannot target admins or above
Ex 2. ulx setgroupcantarget admin !^                     -- Admins cannot target themselves

ulx groupallow <group> <access> [<access tag>] - Puts the access on the group's allow list.
See above on how access strings/tags work.

ulx groupdeny <group> <access> - Removes the group's access.
]]

function ulx.showUserHelp()
	local lines = ULib.explode( "\n", help )
	for _, line in ipairs( lines ) do
		Msg( line .. "\n" )
	end
end
