From 0bd47f0c52d1456d22b9d5bc87641c1062974bed Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 17 Feb 2017 23:25:00 +0100 Subject: [PATCH] Change permission strings so Immortals->Developer, Wizards->Admin, Builders->Builder, PlayerHelper->Helper, Players->Player, Guests->Guest. Made perm() and pperm() lock function accept both the plural and singular form (so both Admin and Admins work). Still lacking a data migration for updating an existing database to the new setup. --- evennia/commands/default/admin.py | 16 +++--- evennia/commands/default/batchprocess.py | 2 +- evennia/commands/default/building.py | 66 ++++++++++++------------ evennia/commands/default/comms.py | 12 ++--- evennia/commands/default/general.py | 2 +- evennia/commands/default/help.py | 2 +- evennia/commands/default/player.py | 14 ++--- evennia/commands/default/system.py | 22 ++++---- evennia/commands/default/tests.py | 2 +- evennia/commands/default/unloggedin.py | 6 +-- evennia/contrib/chargen.py | 2 +- evennia/contrib/email_login.py | 4 +- evennia/contrib/rpsystem.py | 2 +- evennia/contrib/tutorial_world/rooms.py | 2 +- evennia/contrib/wilderness.py | 2 +- evennia/locks/lockfuncs.py | 3 +- evennia/locks/lockhandler.py | 20 +++---- evennia/locks/tests.py | 10 ++-- evennia/objects/objects.py | 14 ++--- evennia/players/bots.py | 2 +- evennia/players/players.py | 4 +- evennia/server/initial_setup.py | 8 +-- evennia/settings_default.py | 20 +++---- 23 files changed, 119 insertions(+), 118 deletions(-) diff --git a/evennia/commands/default/admin.py b/evennia/commands/default/admin.py index a8b218962d..3169618d10 100644 --- a/evennia/commands/default/admin.py +++ b/evennia/commands/default/admin.py @@ -36,7 +36,7 @@ class CmdBoot(COMMAND_DEFAULT_CLASS): """ key = "@boot" - locks = "cmd:perm(boot) or perm(Wizards)" + locks = "cmd:perm(boot) or perm(Admin)" help_category = "Admin" def func(self): @@ -152,7 +152,7 @@ class CmdBan(COMMAND_DEFAULT_CLASS): """ key = "@ban" aliases = ["@bans"] - locks = "cmd:perm(ban) or perm(Immortals)" + locks = "cmd:perm(ban) or perm(Developer)" help_category = "Admin" def func(self): @@ -219,7 +219,7 @@ class CmdUnban(COMMAND_DEFAULT_CLASS): """ key = "@unban" - locks = "cmd:perm(unban) or perm(Immortals)" + locks = "cmd:perm(unban) or perm(Developer)" help_category = "Admin" def func(self): @@ -266,7 +266,7 @@ class CmdDelPlayer(COMMAND_DEFAULT_CLASS): """ key = "@delplayer" - locks = "cmd:perm(delplayer) or perm(Immortals)" + locks = "cmd:perm(delplayer) or perm(Developer)" help_category = "Admin" def func(self): @@ -342,7 +342,7 @@ class CmdEmit(COMMAND_DEFAULT_CLASS): """ key = "@emit" aliases = ["@pemit", "@remit"] - locks = "cmd:perm(emit) or perm(Builders)" + locks = "cmd:perm(emit) or perm(Builder)" help_category = "Admin" def func(self): @@ -410,7 +410,7 @@ class CmdNewPassword(COMMAND_DEFAULT_CLASS): """ key = "@userpassword" - locks = "cmd:perm(newpassword) or perm(Wizards)" + locks = "cmd:perm(newpassword) or perm(Admin)" help_category = "Admin" def func(self): @@ -451,7 +451,7 @@ class CmdPerm(COMMAND_DEFAULT_CLASS): """ key = "@perm" aliases = "@setperm" - locks = "cmd:perm(perm) or perm(Immortals)" + locks = "cmd:perm(perm) or perm(Developer)" help_category = "Admin" def func(self): @@ -546,7 +546,7 @@ class CmdWall(COMMAND_DEFAULT_CLASS): Announces a message to all connected players. """ key = "@wall" - locks = "cmd:perm(wall) or perm(Wizards)" + locks = "cmd:perm(wall) or perm(Admin)" help_category = "Admin" def func(self): diff --git a/evennia/commands/default/batchprocess.py b/evennia/commands/default/batchprocess.py index cefeba6baa..52740ccb37 100644 --- a/evennia/commands/default/batchprocess.py +++ b/evennia/commands/default/batchprocess.py @@ -239,7 +239,7 @@ class CmdBatchCommands(_COMMAND_DEFAULT_CLASS): """ key = "@batchcommands" aliases = ["@batchcommand", "@batchcmd"] - locks = "cmd:perm(batchcommands) or superuser()" + locks = "cmd:perm(batchcommands) or perm(Developer)" help_category = "Building" def func(self): diff --git a/evennia/commands/default/building.py b/evennia/commands/default/building.py index 28ee1a033a..a020b21483 100644 --- a/evennia/commands/default/building.py +++ b/evennia/commands/default/building.py @@ -117,7 +117,7 @@ class CmdSetObjAlias(COMMAND_DEFAULT_CLASS): key = "@alias" aliases = "@setobjalias" - locks = "cmd:perm(setobjalias) or perm(Builders)" + locks = "cmd:perm(setobjalias) or perm(Builder)" help_category = "Building" def func(self): @@ -196,7 +196,7 @@ class CmdCopy(ObjManipCommand): """ key = "@copy" - locks = "cmd:perm(copy) or perm(Builders)" + locks = "cmd:perm(copy) or perm(Builder)" help_category = "Building" def func(self): @@ -276,7 +276,7 @@ class CmdCpAttr(ObjManipCommand): If you don't supply a source object, yourself is used. """ key = "@cpattr" - locks = "cmd:perm(cpattr) or perm(Builders)" + locks = "cmd:perm(cpattr) or perm(Builder)" help_category = "Building" def check_from_attr(self, obj, attr, clear=False): @@ -418,7 +418,7 @@ class CmdMvAttr(ObjManipCommand): object. If you don't supply a source object, yourself is used. """ key = "@mvattr" - locks = "cmd:perm(mvattr) or perm(Builders)" + locks = "cmd:perm(mvattr) or perm(Builder)" help_category = "Building" def func(self): @@ -466,12 +466,12 @@ class CmdCreate(ObjManipCommand): """ key = "@create" - locks = "cmd:perm(create) or perm(Builders)" + locks = "cmd:perm(create) or perm(Builder)" help_category = "Building" # lockstring of newly created objects, for easy overloading. # Will be formatted with the {id} of the creating object. - new_obj_lockstring = "control:id({id}) or perm(Wizards);delete:id({id}) or perm(Wizards)" + new_obj_lockstring = "control:id({id}) or perm(Admin);delete:id({id}) or perm(Admin)" def func(self): """ @@ -548,7 +548,7 @@ class CmdDesc(COMMAND_DEFAULT_CLASS): """ key = "@setdesc" aliases = "@describe" - locks = "cmd:perm(desc) or perm(Builders)" + locks = "cmd:perm(desc) or perm(Builder)" help_category = "Building" def edit_handler(self): @@ -616,7 +616,7 @@ class CmdDestroy(COMMAND_DEFAULT_CLASS): key = "@destroy" aliases = ["@delete", "@del"] - locks = "cmd:perm(destroy) or perm(Builders)" + locks = "cmd:perm(destroy) or perm(Builder)" help_category = "Building" def func(self): @@ -701,14 +701,14 @@ class CmdDig(ObjManipCommand): would be 'north;no;n'. """ key = "@dig" - locks = "cmd:perm(dig) or perm(Builders)" + locks = "cmd:perm(dig) or perm(Builder)" help_category = "Building" # lockstring of newly created rooms, for easy overloading. # Will be formatted with the {id} of the creating object. - new_room_lockstring = "control:id({id}) or perm(Wizards); " \ - "delete:id({id}) or perm(Wizards); " \ - "edit:id({id}) or perm(Wizards)" + new_room_lockstring = "control:id({id}) or perm(Admin); " \ + "delete:id({id}) or perm(Admin); " \ + "edit:id({id}) or perm(Admin)" def func(self): "Do the digging. Inherits variables from ObjManipCommand.parse()" @@ -845,7 +845,7 @@ class CmdTunnel(COMMAND_DEFAULT_CLASS): key = "@tunnel" aliases = ["@tun"] - locks = "cmd: perm(tunnel) or perm(Builders)" + locks = "cmd: perm(tunnel) or perm(Builder)" help_category = "Building" # store the direction, full name and its opposite @@ -918,7 +918,7 @@ class CmdLink(COMMAND_DEFAULT_CLASS): """ key = "@link" - locks = "cmd:perm(link) or perm(Builders)" + locks = "cmd:perm(link) or perm(Builder)" help_category = "Building" def func(self): @@ -996,7 +996,7 @@ class CmdUnLink(CmdLink): # this is just a child of CmdLink key = "@unlink" - locks = "cmd:perm(unlink) or perm(Builders)" + locks = "cmd:perm(unlink) or perm(Builder)" help_key = "Building" def func(self): @@ -1034,7 +1034,7 @@ class CmdSetHome(CmdLink): """ key = "@sethome" - locks = "cmd:perm(@home) or perm(Builders)" + locks = "cmd:perm(@home) or perm(Builder)" help_category = "Building" def func(self): @@ -1081,7 +1081,7 @@ class CmdListCmdSets(COMMAND_DEFAULT_CLASS): """ key = "@cmdsets" aliases = "@listcmsets" - locks = "cmd:perm(listcmdsets) or perm(Builders)" + locks = "cmd:perm(listcmdsets) or perm(Builder)" help_category = "Building" def func(self): @@ -1112,7 +1112,7 @@ class CmdName(ObjManipCommand): key = "@name" aliases = ["@rename"] - locks = "cmd:perm(rename) or perm(Builders)" + locks = "cmd:perm(rename) or perm(Builder)" help_category = "Building" def func(self): @@ -1188,7 +1188,7 @@ class CmdOpen(ObjManipCommand): """ key = "@open" - locks = "cmd:perm(open) or perm(Builders)" + locks = "cmd:perm(open) or perm(Builder)" help_category = "Building" # a custom member method to chug out exits and do checks @@ -1410,7 +1410,7 @@ class CmdSetAttribute(ObjManipCommand): """ key = "@set" - locks = "cmd:perm(set) or perm(Builders)" + locks = "cmd:perm(set) or perm(Builder)" help_category = "Building" def check_obj(self, obj): @@ -1592,7 +1592,7 @@ class CmdTypeclass(COMMAND_DEFAULT_CLASS): key = "@typeclass" aliases = ["@type", "@parent", "@swap", "@update"] - locks = "cmd:perm(typeclass) or perm(Builders)" + locks = "cmd:perm(typeclass) or perm(Builder)" help_category = "Building" def func(self): @@ -1682,7 +1682,7 @@ class CmdWipe(ObjManipCommand): matching the given attribute-wildcard search string. """ key = "@wipe" - locks = "cmd:perm(wipe) or perm(Builders)" + locks = "cmd:perm(wipe) or perm(Builder)" help_category = "Building" def func(self): @@ -1740,18 +1740,18 @@ class CmdLock(ObjManipCommand): Separator expressions need not be capitalized. For example: - 'get: id(25) or perm(Wizards)' + 'get: id(25) or perm(Admin)' The 'get' access_type is checked by the get command and will an object locked with this string will only be possible to - pick up by Wizards or by object with id 25. + pick up by Admins or by object with id=25. You can add several access_types after oneanother by separating them by ';', i.e: - 'get:id(25);delete:perm(Builders)' + 'get:id(25);delete:perm(Builder)' """ key = "@lock" aliases = ["@locks"] - locks = "cmd: perm(locks) or perm(Builders)" + locks = "cmd: perm(locks) or perm(Builder)" help_category = "Building" def func(self): @@ -1844,7 +1844,7 @@ class CmdExamine(ObjManipCommand): """ key = "@examine" aliases = ["@ex","exam"] - locks = "cmd:perm(examine) or perm(Builders)" + locks = "cmd:perm(examine) or perm(Builder)" help_category = "Building" arg_regex = r"(/\w+?(\s|$))|\s|$" @@ -2113,7 +2113,7 @@ class CmdFind(COMMAND_DEFAULT_CLASS): key = "@find" aliases = "@search, @locate" - locks = "cmd:perm(find) or perm(Builders)" + locks = "cmd:perm(find) or perm(Builder)" help_category = "Building" def func(self): @@ -2244,7 +2244,7 @@ class CmdTeleport(COMMAND_DEFAULT_CLASS): is teleported to the target location. """ key = "@tel" aliases = "@teleport" - locks = "cmd:perm(teleport) or perm(Builders)" + locks = "cmd:perm(teleport) or perm(Builder)" help_category = "Building" def func(self): @@ -2343,7 +2343,7 @@ class CmdScript(COMMAND_DEFAULT_CLASS): key = "@script" aliases = "@addscript" - locks = "cmd:perm(script) or perm(Builders)" + locks = "cmd:perm(script) or perm(Builder)" help_category = "Building" def func(self): @@ -2444,7 +2444,7 @@ class CmdTag(COMMAND_DEFAULT_CLASS): key = "@tag" aliases = ["@tags"] - locks = "cmd:perm(tag) or perm(Builders)" + locks = "cmd:perm(tag) or perm(Builder)" help_category = "Building" arg_regex = r"(/\w+?(\s|$))|\s|$" @@ -2584,7 +2584,7 @@ class CmdSpawn(COMMAND_DEFAULT_CLASS): """ key = "@spawn" - locks = "cmd:perm(spawn) or perm(Builders)" + locks = "cmd:perm(spawn) or perm(Builder)" help_category = "Building" def func(self): @@ -2626,7 +2626,7 @@ class CmdSpawn(COMMAND_DEFAULT_CLASS): elif isinstance(prototype, dict): # we got the prototype on the command line. We must make sure to not allow # the 'exec' key unless we are immortals or higher. - if "exec" in prototype and not self.caller.check_permstring("Immortals"): + if "exec" in prototype and not self.caller.check_permstring("Developer"): self.caller.msg("Spawn aborted: You don't have access to use the 'exec' prototype key.") return else: diff --git a/evennia/commands/default/comms.py b/evennia/commands/default/comms.py index ed69475635..1b0f96f52f 100644 --- a/evennia/commands/default/comms.py +++ b/evennia/commands/default/comms.py @@ -453,7 +453,7 @@ class CmdCemit(COMMAND_DEFAULT_CLASS): key = "@cemit" aliases = ["@cmsg"] - locks = "cmd: not pperm(channel_banned) and pperm(Players)" + locks = "cmd: not pperm(channel_banned) and pperm(Player)" help_category = "Comms" # this is used by the COMMAND_DEFAULT_CLASS parent @@ -530,7 +530,7 @@ class CmdChannelCreate(COMMAND_DEFAULT_CLASS): key = "@ccreate" aliases = "channelcreate" - locks = "cmd:not pperm(channel_banned) and pperm(Players)" + locks = "cmd:not pperm(channel_banned) and pperm(Player)" help_category = "Comms" # this is used by the COMMAND_DEFAULT_CLASS parent @@ -850,7 +850,7 @@ class CmdIRC2Chan(COMMAND_DEFAULT_CLASS): """ key = "@irc2chan" - locks = "cmd:serversetting(IRC_ENABLED) and pperm(Immortals)" + locks = "cmd:serversetting(IRC_ENABLED) and pperm(Developer)" help_category = "Comms" def func(self): @@ -943,7 +943,7 @@ class CmdIRCStatus(COMMAND_DEFAULT_CLASS): """ key = "@ircstatus" - locks = "cmd:serversetting(IRC_ENABLED) and perm(ircstatus) or perm(Builders))" + locks = "cmd:serversetting(IRC_ENABLED) and perm(ircstatus) or perm(Builder))" help_category = "Comms" def func(self): @@ -981,7 +981,7 @@ class CmdIRCStatus(COMMAND_DEFAULT_CLASS): # an asynchronous call. self.caller.msg("Requesting nicklist from %s (%s:%s)." % (channel, network, port)) ircbot.get_nicklist(self.caller) - elif self.caller.locks.check_lockstring(self.caller, "dummy:perm(ircstatus) or perm(Immortals)"): + elif self.caller.locks.check_lockstring(self.caller, "dummy:perm(ircstatus) or perm(Developer)"): # reboot the client self.caller.msg("Forcing a disconnect + reconnect of %s." % chtext) ircbot.reconnect() @@ -1016,7 +1016,7 @@ class CmdRSS2Chan(COMMAND_DEFAULT_CLASS): """ key = "@rss2chan" - locks = "cmd:serversetting(RSS_ENABLED) and pperm(Immortals)" + locks = "cmd:serversetting(RSS_ENABLED) and pperm(Developer)" help_category = "Comms" def func(self): diff --git a/evennia/commands/default/general.py b/evennia/commands/default/general.py index 8b78e97a0f..cfcccc7612 100644 --- a/evennia/commands/default/general.py +++ b/evennia/commands/default/general.py @@ -24,7 +24,7 @@ class CmdHome(COMMAND_DEFAULT_CLASS): """ key = "home" - locks = "cmd:perm(home) or perm(Builders)" + locks = "cmd:perm(home) or perm(Builder)" arg_regex = r"$" def func(self): diff --git a/evennia/commands/default/help.py b/evennia/commands/default/help.py index d15228992c..8bfe55e834 100644 --- a/evennia/commands/default/help.py +++ b/evennia/commands/default/help.py @@ -293,7 +293,7 @@ class CmdSetHelp(COMMAND_DEFAULT_CLASS): """ key = "@sethelp" - locks = "cmd:perm(PlayerHelpers)" + locks = "cmd:perm(Helper)" help_category = "Building" def func(self): diff --git a/evennia/commands/default/player.py b/evennia/commands/default/player.py index ae95388a8e..07d43cdf7c 100644 --- a/evennia/commands/default/player.py +++ b/evennia/commands/default/player.py @@ -121,7 +121,7 @@ class CmdCharCreate(COMMAND_DEFAULT_CLASS): if you want. """ key = "@charcreate" - locks = "cmd:pperm(Players)" + locks = "cmd:pperm(Player)" help_category = "General" # this is used by the parent @@ -164,7 +164,7 @@ class CmdCharCreate(COMMAND_DEFAULT_CLASS): home=default_home, permissions=permissions) # only allow creator (and immortals) to puppet this char - new_character.locks.add("puppet:id(%i) or pid(%i) or perm(Immortals) or pperm(Immortals)" % + new_character.locks.add("puppet:id(%i) or pid(%i) or perm(Developer) or pperm(Developer)" % (new_character.id, player.id)) player.db._playable_characters.append(new_character) if desc: @@ -184,7 +184,7 @@ class CmdCharDelete(COMMAND_DEFAULT_CLASS): Permanently deletes one of your characters. """ key = "@chardelete" - locks = "cmd:pperm(Players)" + locks = "cmd:pperm(Player)" help_category = "General" def func(self): @@ -298,7 +298,7 @@ class CmdOOC(MuxPlayerLookCommand): """ key = "@ooc" - locks = "cmd:pperm(Players)" + locks = "cmd:pperm(Player)" aliases = "@unpuppet" help_category = "General" @@ -403,7 +403,7 @@ class CmdWho(COMMAND_DEFAULT_CLASS): if self.cmdstring == "doing": show_session_data = False else: - show_session_data = player.check_permstring("Immortals") or player.check_permstring("Wizards") + show_session_data = player.check_permstring("Developer") or player.check_permstring("Wizards") nplayers = (SESSIONS.player_count()) if show_session_data: @@ -610,7 +610,7 @@ class CmdPassword(COMMAND_DEFAULT_CLASS): Changes your password. Make sure to pick a safe one. """ key = "@password" - locks = "cmd:pperm(Players)" + locks = "cmd:pperm(Player)" # this is used by the parent player_caller = True @@ -793,7 +793,7 @@ class CmdQuell(COMMAND_DEFAULT_CLASS): key = "@quell" aliases = ["@unquell"] - locks = "cmd:pperm(Players)" + locks = "cmd:pperm(Player)" help_category = "General" # this is used by the parent diff --git a/evennia/commands/default/system.py b/evennia/commands/default/system.py index 429308ce26..c07d20b697 100644 --- a/evennia/commands/default/system.py +++ b/evennia/commands/default/system.py @@ -47,7 +47,7 @@ class CmdReload(COMMAND_DEFAULT_CLASS): @reset to purge) and at_reload() hooks will be called. """ key = "@reload" - locks = "cmd:perm(reload) or perm(Immortals)" + locks = "cmd:perm(reload) or perm(Developer)" help_category = "System" def func(self): @@ -83,7 +83,7 @@ class CmdReset(COMMAND_DEFAULT_CLASS): """ key = "@reset" aliases = ['@reboot'] - locks = "cmd:perm(reload) or perm(Immortals)" + locks = "cmd:perm(reload) or perm(Developer)" help_category = "System" def func(self): @@ -105,7 +105,7 @@ class CmdShutdown(COMMAND_DEFAULT_CLASS): Gracefully shut down both Server and Portal. """ key = "@shutdown" - locks = "cmd:perm(shutdown) or perm(Immortals)" + locks = "cmd:perm(shutdown) or perm(Developer)" help_category = "System" def func(self): @@ -240,7 +240,7 @@ class CmdPy(COMMAND_DEFAULT_CLASS): """ key = "@py" aliases = ["!"] - locks = "cmd:perm(py) or perm(Immortals)" + locks = "cmd:perm(py) or perm(Developer)" help_category = "System" def func(self): @@ -322,7 +322,7 @@ class CmdScripts(COMMAND_DEFAULT_CLASS): """ key = "@scripts" aliases = ["@globalscript", "@listscripts"] - locks = "cmd:perm(listscripts) or perm(Wizards)" + locks = "cmd:perm(listscripts) or perm(Admin)" help_category = "System" def func(self): @@ -405,7 +405,7 @@ class CmdObjects(COMMAND_DEFAULT_CLASS): """ key = "@objects" aliases = ["@listobjects", "@listobjs", '@stats', '@db'] - locks = "cmd:perm(listobjects) or perm(Builders)" + locks = "cmd:perm(listobjects) or perm(Builder)" help_category = "System" def func(self): @@ -469,7 +469,7 @@ class CmdPlayers(COMMAND_DEFAULT_CLASS): """ key = "@players" aliases = ["@listplayers"] - locks = "cmd:perm(listplayers) or perm(Wizards)" + locks = "cmd:perm(listplayers) or perm(Admin)" help_category = "System" def func(self): @@ -521,7 +521,7 @@ class CmdService(COMMAND_DEFAULT_CLASS): key = "@service" aliases = ["@services"] - locks = "cmd:perm(service) or perm(Immortals)" + locks = "cmd:perm(service) or perm(Developer)" help_category = "System" def func(self): @@ -645,7 +645,7 @@ class CmdTime(COMMAND_DEFAULT_CLASS): """ key = "@time" aliases = "@uptime" - locks = "cmd:perm(time) or perm(Players)" + locks = "cmd:perm(time) or perm(Player)" help_category = "System" def func(self): @@ -703,7 +703,7 @@ class CmdServerLoad(COMMAND_DEFAULT_CLASS): """ key = "@server" aliases = ["@serverload", "@serverprocess"] - locks = "cmd:perm(list) or perm(Immortals)" + locks = "cmd:perm(list) or perm(Developer)" help_category = "System" def func(self): @@ -821,7 +821,7 @@ class CmdTickers(COMMAND_DEFAULT_CLASS): """ key = "@tickers" help_category = "System" - locks = "cmd:perm(tickers) or perm(Builders)" + locks = "cmd:perm(tickers) or perm(Builder)" def func(self): from evennia import TICKER_HANDLER diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index 4ade106ffe..2bb227873a 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -258,7 +258,7 @@ class TestBuilding(CommandTest): "Obj changed typeclass from evennia.objects.objects.DefaultObject to evennia.objects.objects.DefaultExit.") def test_lock(self): - self.call(building.CmdLock(), "Obj = test:perm(Immortals)", "Added lock 'test:perm(Immortals)' to Obj.") + self.call(building.CmdLock(), "Obj = test:perm(Developer)", "Added lock 'test:perm(Developer)' to Obj.") def test_find(self): self.call(building.CmdFind(), "Room2", "One Match") diff --git a/evennia/commands/default/unloggedin.py b/evennia/commands/default/unloggedin.py index ae8f3b0c0f..665186fafa 100644 --- a/evennia/commands/default/unloggedin.py +++ b/evennia/commands/default/unloggedin.py @@ -12,7 +12,7 @@ from evennia.objects.models import ObjectDB from evennia.server.models import ServerConfig from evennia.comms.models import ChannelDB -from evennia.utils import create, logger, utils, ansi +from evennia.utils import create, logger, utils from evennia.commands.cmdhandler import CMD_LOGINSTART COMMAND_DEFAULT_CLASS = utils.class_from_module(settings.COMMAND_DEFAULT_CLASS) @@ -560,8 +560,8 @@ def _create_character(session, new_player, typeclass, home, permissions): # set playable character list new_player.db._playable_characters.append(new_character) - # allow only the character itself and the player to puppet this character (and Immortals). - new_character.locks.add("puppet:id(%i) or pid(%i) or perm(Immortals) or pperm(Immortals)" % + # allow only the character itself and the player to puppet this character (and Developers). + new_character.locks.add("puppet:id(%i) or pid(%i) or perm(Developer) or pperm(Developer)" % (new_character.id, new_player.id)) # If no description is set, set a default description diff --git a/evennia/contrib/chargen.py b/evennia/contrib/chargen.py index 55639e4e90..b1087af806 100644 --- a/evennia/contrib/chargen.py +++ b/evennia/contrib/chargen.py @@ -169,7 +169,7 @@ class CmdOOCCharacterCreate(Command): self.caller.msg("{rThe Character couldn't be created. This is a bug. Please contact an admin.") return # make sure to lock the character to only be puppeted by this player - new_character.locks.add("puppet:id(%i) or pid(%i) or perm(Immortals) or pperm(Immortals)" % + new_character.locks.add("puppet:id(%i) or pid(%i) or perm(Developer) or pperm(Developer)" % (new_character.id, self.caller.id)) # save dbref diff --git a/evennia/contrib/email_login.py b/evennia/contrib/email_login.py index 6ec544f664..7b991ba351 100644 --- a/evennia/contrib/email_login.py +++ b/evennia/contrib/email_login.py @@ -235,8 +235,8 @@ its and @/./+/-/_ only.") # this echoes the restrictions made by django's auth m # set playable character list new_player.db._playable_characters.append(new_character) - # allow only the character itself and the player to puppet this character (and Immortals). - new_character.locks.add("puppet:id(%i) or pid(%i) or perm(Immortals) or pperm(Immortals)" % + # allow only the character itself and the player to puppet this character (and Admin). + new_character.locks.add("puppet:id(%i) or pid(%i) or perm(Developer) or pperm(Developer)" % (new_character.id, new_player.id)) # If no description is set, set a default description diff --git a/evennia/contrib/rpsystem.py b/evennia/contrib/rpsystem.py index 73a682eb95..7f453d67be 100644 --- a/evennia/contrib/rpsystem.py +++ b/evennia/contrib/rpsystem.py @@ -1256,7 +1256,7 @@ class ContribRPObject(DefaultObject): candidates.append(self) # the sdesc-related substitution - is_builder = self.locks.check_lockstring(self, "perm(Builders)") + is_builder = self.locks.check_lockstring(self, "perm(Builder)") use_dbref = is_builder if use_dbref is None else use_dbref search_obj = lambda string: ObjectDB.objects.object_search(string, attribute_name=attribute_name, diff --git a/evennia/contrib/tutorial_world/rooms.py b/evennia/contrib/tutorial_world/rooms.py index 5310dfa106..176bfa7994 100644 --- a/evennia/contrib/tutorial_world/rooms.py +++ b/evennia/contrib/tutorial_world/rooms.py @@ -98,7 +98,7 @@ class CmdTutorialSetDetail(default_cmds.MuxCommand): multiple aliases to the detail all at once. """ key = "@detail" - locks = "cmd:perm(Builders)" + locks = "cmd:perm(Builder)" help_category = "TutorialWorld" def func(self): diff --git a/evennia/contrib/wilderness.py b/evennia/contrib/wilderness.py index 1cb4052601..9e01a43211 100644 --- a/evennia/contrib/wilderness.py +++ b/evennia/contrib/wilderness.py @@ -603,7 +603,7 @@ class WildernessRoom(DefaultRoom): searching, and is expected to produce something useful for builders. """ - if self.locks.check_lockstring(looker, "perm(Builders)"): + if self.locks.check_lockstring(looker, "perm(Builder)"): name = "{}(#{})".format(self.location_name, self.id) else: name = self.location_name diff --git a/evennia/locks/lockfuncs.py b/evennia/locks/lockfuncs.py index 4d3d1b2922..bdba148cf6 100644 --- a/evennia/locks/lockfuncs.py +++ b/evennia/locks/lockfuncs.py @@ -168,7 +168,8 @@ def perm(accessing_obj, accessed_obj, *args, **kwargs): if utils.inherits_from(accessing_obj, "evennia.objects.objects.DefaultObject") and accessing_obj.player: player = accessing_obj.player - perms_player = [p.lower() for p in player.permissions.all()] + # we strip eventual plural forms, so Builders == Builder + perms_player = [p.lower().rstrip("s") for p in player.permissions.all()] is_quell = player.attributes.get("_quell") if permission in _PERMISSION_HIERARCHY: diff --git a/evennia/locks/lockhandler.py b/evennia/locks/lockhandler.py index 2c0884d452..be35924efb 100644 --- a/evennia/locks/lockhandler.py +++ b/evennia/locks/lockhandler.py @@ -56,21 +56,21 @@ Example: We want to limit who may edit a particular object (let's call this access_type for 'edit', it depends on what the command is looking for). We want this to -only work for those with the Permission 'Builders'. So we use our lock +only work for those with the Permission 'Builder'. So we use our lock function above and define it like this: - 'edit:perm(Builders)' + 'edit:perm(Builder)' Here, the lock-function perm() will be called with the string -'Builders' (accessing_obj and accessed_obj are added automatically, +'Builder' (accessing_obj and accessed_obj are added automatically, you only need to add the args/kwargs, if any). -If we wanted to make sure the accessing object was BOTH a Builders and a +If we wanted to make sure the accessing object was BOTH a Builder and a GoodGuy, we could use AND: - 'edit:perm(Builders) AND perm(GoodGuy)' + 'edit:perm(Builder) AND perm(GoodGuy)' -To allow EITHER Builders and GoodGuys, we replace AND with OR. perm() is just +To allow EITHER Builder and GoodGuys, we replace AND with OR. perm() is just one example, the lock function can do anything and compare any properties of the calling object to decide if the lock is passed or not. @@ -79,7 +79,7 @@ the calling object to decide if the lock is passed or not. To make these work, add the string to the lockhandler of the object you want to apply the lock to: - obj.lockhandler.add('edit:perm(Builders)') + obj.lockhandler.add('edit:perm(Builder)') From then on, a command that wants to check for 'edit' access on this object would do something like this: @@ -541,13 +541,13 @@ def _test(): obj1 = TestObj() obj2 = TestObj() - #obj1.lock_storage = "owner:dbref(#4);edit:dbref(#5) or perm(Wizards);examine:perm(Builders);delete:perm(Wizards);get:all()" + #obj1.lock_storage = "owner:dbref(#4);edit:dbref(#5) or perm(Admin);examine:perm(Builder);delete:perm(Admin);get:all()" #obj1.lock_storage = "cmd:all();admin:id(1);listen:all();send:all()" - obj1.lock_storage = "listen:perm(Immortals)" + obj1.lock_storage = "listen:perm(Developer)" pdb.set_trace() obj1.locks = LockHandler(obj1) - obj2.permissions.add("Immortals") + obj2.permissions.add("Developer") obj2.id = 4 #obj1.locks.add("edit:attr(test)") diff --git a/evennia/locks/tests.py b/evennia/locks/tests.py index 50f99f9abb..0c47456ede 100644 --- a/evennia/locks/tests.py +++ b/evennia/locks/tests.py @@ -25,8 +25,8 @@ from evennia.locks import lockfuncs class TestLockCheck(EvenniaTest): def testrun(self): dbref = self.obj2.dbref - self.obj1.locks.add("owner:dbref(%s);edit:dbref(%s) or perm(Wizards);examine:perm(Builders) and id(%s);delete:perm(Wizards);get:all()" % (dbref, dbref, dbref)) - self.obj2.permissions.add('Wizards') + self.obj1.locks.add("owner:dbref(%s);edit:dbref(%s) or perm(Admin);examine:perm(Builder) and id(%s);delete:perm(Admin);get:all()" % (dbref, dbref, dbref)) + self.obj2.permissions.add('Admin') self.assertEquals(True, self.obj1.locks.check(self.obj2, 'owner')) self.assertEquals(True, self.obj1.locks.check(self.obj2, 'edit')) self.assertEquals(True, self.obj1.locks.check(self.obj2, 'examine')) @@ -39,11 +39,11 @@ class TestLockCheck(EvenniaTest): class TestLockfuncs(EvenniaTest): def testrun(self): - self.obj2.permissions.add('Wizards') + self.obj2.permissions.add('Admin') self.assertEquals(True, lockfuncs.true(self.obj2, self.obj1)) self.assertEquals(False, lockfuncs.false(self.obj2, self.obj1)) - self.assertEquals(True, lockfuncs.perm(self.obj2, self.obj1, 'Wizards')) - self.assertEquals(True, lockfuncs.perm_above(self.obj2, self.obj1, 'Builders')) + self.assertEquals(True, lockfuncs.perm(self.obj2, self.obj1, 'Admin')) + self.assertEquals(True, lockfuncs.perm_above(self.obj2, self.obj1, 'Builder')) dbref = self.obj2.dbref self.assertEquals(True, lockfuncs.dbref(self.obj2, self.obj1, '%s' % dbref)) self.obj2.db.testattr = 45 diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 3dda680476..0b3eb8a940 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -276,7 +276,7 @@ class DefaultObject(with_metaclass(TypeclassBase, ObjectDB)): builders. """ - if self.locks.check_lockstring(looker, "perm(Builders)"): + if self.locks.check_lockstring(looker, "perm(Builder)"): return "{}(#{})".format(self.name, self.id) return self.name @@ -973,15 +973,15 @@ class DefaultObject(with_metaclass(TypeclassBase, ObjectDB)): # controller, for example) self.locks.add(";".join([ - "control:perm(Immortals)", # edit locks/permissions, delete - "examine:perm(Builders)", # examine properties + "control:perm(Developer)", # edit locks/permissions, delete + "examine:perm(Builder)", # examine properties "view:all()", # look at object (visibility) - "edit:perm(Wizards)", # edit properties/attributes - "delete:perm(Wizards)", # delete object + "edit:perm(Admin)", # edit properties/attributes + "delete:perm(Admin)", # delete object "get:all()", # pick up object "call:true()", # allow to call commands on this object - "tell:perm(Wizards)", # allow emits to this object - "puppet:pperm(Immortals)"])) # lock down puppeting only to staff by default + "tell:perm(Admin)", # allow emits to this object + "puppet:pperm(Developer)"])) # lock down puppeting only to staff by default def basetype_posthook_setup(self): """ diff --git a/evennia/players/bots.py b/evennia/players/bots.py index f4a0c469ba..196806ff2d 100644 --- a/evennia/players/bots.py +++ b/evennia/players/bots.py @@ -96,7 +96,7 @@ class Bot(DefaultPlayer): # the text encoding to use. self.db.encoding = "utf-8" # A basic security setup - lockstring = "examine:perm(Wizards);edit:perm(Wizards);delete:perm(Wizards);boot:perm(Wizards);msg:false()" + lockstring = "examine:perm(Admin);edit:perm(Admin);delete:perm(Admin);boot:perm(Admin);msg:false()" self.locks.add(lockstring) # set the basics of being a bot script_key = "%s" % self.key diff --git a/evennia/players/players.py b/evennia/players/players.py index 92d5dbcf24..e2bb693720 100644 --- a/evennia/players/players.py +++ b/evennia/players/players.py @@ -566,8 +566,8 @@ class DefaultPlayer(with_metaclass(TypeclassBase, PlayerDB)): """ # A basic security setup - lockstring = "examine:perm(Wizards);edit:perm(Wizards);" \ - "delete:perm(Wizards);boot:perm(Wizards);msg:all()" + lockstring = "examine:perm(Admin);edit:perm(Admin);" \ + "delete:perm(Admin);boot:perm(Admin);msg:all()" self.locks.add(lockstring) # The ooc player cmdset diff --git a/evennia/server/initial_setup.py b/evennia/server/initial_setup.py index 4cdfc8763d..22cf720177 100644 --- a/evennia/server/initial_setup.py +++ b/evennia/server/initial_setup.py @@ -77,9 +77,9 @@ def create_objects(): god_player.swap_typeclass(player_typeclass, clean_attributes=True) god_player.basetype_setup() god_player.at_player_creation() - god_player.locks.add("examine:perm(Immortals);edit:false();delete:false();boot:false();msg:all()") + god_player.locks.add("examine:perm(Developer);edit:false();delete:false();boot:false();msg:all()") # this is necessary for quelling to work correctly. - god_player.permissions.add("Immortals") + god_player.permissions.add("Developer") # Limbo is the default "nowhere" starting room @@ -93,8 +93,8 @@ def create_objects(): god_character.id = 1 god_character.save() god_character.db.desc = _('This is User #1.') - god_character.locks.add("examine:perm(Immortals);edit:false();delete:false();boot:false();msg:all();puppet:false()") - god_character.permissions.add("Immortals") + god_character.locks.add("examine:perm(Developer);edit:false();delete:false();boot:false();msg:all();puppet:false()") + god_character.permissions.add("Developer") god_player.attributes.add("_first_login", True) god_player.attributes.add("_last_puppet", god_character) diff --git a/evennia/settings_default.py b/evennia/settings_default.py index 39a6165228..c77985b15f 100644 --- a/evennia/settings_default.py +++ b/evennia/settings_default.py @@ -485,15 +485,15 @@ MULTISESSION_MODE = 0 MAX_NR_CHARACTERS = 1 # The access hierarchy, in climbing order. A higher permission in the # hierarchy includes access of all levels below it. Used by the perm()/pperm() -# lock functions. -PERMISSION_HIERARCHY = ["Guests", # note-only used if GUEST_ENABLED=True - "Players", - "PlayerHelpers", - "Builders", - "Wizards", - "Immortals"] +# lock functions, which accepts both plural and singular (Admin & Admins) +PERMISSION_HIERARCHY = ["Guest", # note-only used if GUEST_ENABLED=True + "Player", + "Helper", + "Builder", + "Admin", + "Developer"] # The default permission given to all new players -PERMISSION_PLAYER_DEFAULT = "Players" +PERMISSION_PLAYER_DEFAULT = "Player" # Default sizes for client window (in number of characters), if client # is not supplying this on its own CLIENT_DEFAULT_WIDTH = 78 @@ -540,12 +540,12 @@ DEFAULT_CHANNELS = [ {"key": "Public", "aliases": ('ooc', 'pub'), "desc": "Public discussion", - "locks": "control:perm(Wizards);listen:all();send:all()"}, + "locks": "control:perm(Admin);listen:all();send:all()"}, # connection/mud info {"key": "MudInfo", "aliases": "", "desc": "Connection log", - "locks": "control:perm(Immortals);listen:perm(Wizards);send:false()"} + "locks": "control:perm(Developer);listen:perm(Admin);send:false()"} ] # Extra optional channel for receiving connection messages (" has (dis)connected"). # While the MudInfo channel will also receieve this, this channel is meant for non-staffers.