Permissions
SwiftlyS2 provides a plugin-scoped permission service for checking access, granting and revoking permissions, and building permission hierarchies.
Accessing Permission Service
Permissions are available through Core.Permission.
public override void Load(bool hotReload)
{
var permission = Core.Permission;
}All permission checks and mutations use a SteamID64 (ulong) as the player identifier.
Checking Permissions
Single Permission
Use PlayerHasPermission when checking one permission key.
ulong steamId = player.SteamID;
if (Core.Permission.PlayerHasPermission(steamId, "myplugin.admin"))
{
player.PrintToChat("You have admin access.");
}Multiple Permissions
Use PlayerHasPermissions to require all permissions in a set.
bool canUseRestrictedAction = Core.Permission.PlayerHasPermissions(
player.SteamID,
[
"myplugin.admin.kick",
"myplugin.admin.ban"
]
);Wildcard Permissions
Wildcard keys are supported (for example, myplugin.admin.*).
Core.Permission.AddPermission(player.SteamID, "myplugin.admin.*");
bool canKick = Core.Permission.PlayerHasPermission(player.SteamID, "myplugin.admin.kick");
bool canBan = Core.Permission.PlayerHasPermission(player.SteamID, "myplugin.admin.ban");Granting and Revoking Permissions
Grant permissions with AddPermission and revoke with RemovePermission.
Core.Permission.AddPermission(player.SteamID, "myplugin.vip");
if (!Core.Permission.PlayerHasPermission(player.SteamID, "myplugin.vip"))
{
player.PrintToChat("VIP permission is missing.");
}
Core.Permission.RemovePermission(player.SteamID, "myplugin.vip");You can clear all direct permissions for a player with ClearPermission.
Core.Permission.ClearPermission(player.SteamID);Sub-Permissions (Hierarchy)
Sub-permissions let one permission key imply other keys.
Core.Permission.AddSubPermission("myplugin.admin", "myplugin.moderator");
Core.Permission.AddSubPermission("myplugin.moderator", "myplugin.helper");
Core.Permission.AddPermission(player.SteamID, "myplugin.admin");
bool isModerator = Core.Permission.PlayerHasPermission(player.SteamID, "myplugin.moderator");
bool isHelper = Core.Permission.PlayerHasPermission(player.SteamID, "myplugin.helper");Remove an inherited edge with RemoveSubPermission.
Core.Permission.RemoveSubPermission("myplugin.admin", "myplugin.moderator");Permission Groups in Configuration
Permission groups are configured in permissions.jsonc and assigned to players by SteamID64.
{
"Permissions": {
"Players": {
"76561198135539332": [
"admins"
],
"76561198012345678": [
"admins",
"moderators"
]
},
"PermissionGroups": {
"__default": [
"myplugin.help"
],
"admins": [
"myplugin.admin.*"
],
"moderators": [
"myplugin.moderator.*"
]
}
}
}__default is applied to all players. Group members inherit permissions listed in their assigned groups.
Permission Naming Convention
A consistent naming scheme makes wildcard and hierarchy usage easier.
plugin.scope.actionExample keys:
myplugin.admin.kickmyplugin.admin.banmyplugin.vip.accessmyplugin.commands.reload
Reference
See IPermissionManager for method details.