From 6f52e75725a344304ddb323193853920c1796102 Mon Sep 17 00:00:00 2001 From: Greg Taylor Date: Tue, 2 Jan 2007 06:20:32 +0000 Subject: [PATCH] Beginnings of our permissions system. --- evennia/trunk/apps/genperms/__init__.py | 0 evennia/trunk/apps/genperms/models.py | 24 +++++++++++++++++++++ evennia/trunk/apps/genperms/views.py | 1 + evennia/trunk/apps/helpsys/models.py | 1 - evennia/trunk/apps/objects/models.py | 27 +++++++++++++----------- evennia/trunk/evennia.sql | Bin 52224 -> 57344 bytes evennia/trunk/settings.py.dist | 1 + 7 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 evennia/trunk/apps/genperms/__init__.py create mode 100644 evennia/trunk/apps/genperms/models.py create mode 100644 evennia/trunk/apps/genperms/views.py diff --git a/evennia/trunk/apps/genperms/__init__.py b/evennia/trunk/apps/genperms/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/evennia/trunk/apps/genperms/models.py b/evennia/trunk/apps/genperms/models.py new file mode 100644 index 000000000..06fc7c8b6 --- /dev/null +++ b/evennia/trunk/apps/genperms/models.py @@ -0,0 +1,24 @@ +from django.db import models + +class GenericPerm(models.Model): + """ + This is merely a container class for some generic permissions that don't + fit under a particular module. + """ + class Meta: + permissions = ( + ("announce", "May use @wall to make announcements"), + ("boot", "May use @boot to kick players"), + ("builder", "May build"), + ("chown_all", "Can @chown anything to anyone."), + ("control_all", "May control everything"), + ("examine_all", "Can examine any object"), + ("extended_who", "May see extended WHO list"), + ("free_money", "Has infinite money"), + ("long_fingers", "May get/look/examine etc. from a distance"), + ("steal", "May give negative money"), + ("set_hide", "May set themself invisible"), + ("shutdown", "May @shutdown the site"), + ("tel_anywhere", "May @teleport anywhere"), + ("tel_anyone", "May @teleport anything"), + ) diff --git a/evennia/trunk/apps/genperms/views.py b/evennia/trunk/apps/genperms/views.py new file mode 100644 index 000000000..60f00ef0e --- /dev/null +++ b/evennia/trunk/apps/genperms/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/evennia/trunk/apps/helpsys/models.py b/evennia/trunk/apps/helpsys/models.py index 010ba2125..b1e4ca1ae 100644 --- a/evennia/trunk/apps/helpsys/models.py +++ b/evennia/trunk/apps/helpsys/models.py @@ -1,7 +1,6 @@ from django.db import models import ansi -# Create your models here. class HelpEntry(models.Model): """ A generic help entry. diff --git a/evennia/trunk/apps/objects/models.py b/evennia/trunk/apps/objects/models.py index 66a21936e..3ede270ae 100755 --- a/evennia/trunk/apps/objects/models.py +++ b/evennia/trunk/apps/objects/models.py @@ -18,7 +18,7 @@ class Attribute(models.Model): object = models.ForeignKey("Object") def __str__(self): - return "%s(%d)" % (self.name, self.id,) + return "%s(%s)" % (self.name, self.id) class Admin: list_display = ('object', 'name', 'value',) @@ -62,15 +62,13 @@ class Object(models.Model): return "%s" % (self.get_name(),) class Meta: - permissions = ( - ("can_examine", "Can examine objects"), - ) ordering = ['-date_created', 'id'] class Admin: list_display = ('id', 'name', 'type', 'date_created') list_filter = ('type',) search_fields = ['name'] + save_on_top = True """ BEGIN COMMON METHODS @@ -195,18 +193,21 @@ class Object(models.Model): Returns an object's name. """ if fullname: - return "%s(#%d%s)" % (ansi.parse_ansi(self.name, strip_ansi=True),self.id, self.flag_string()) + return "%s(#%s%s)" % (ansi.parse_ansi(self.name, strip_ansi=True),self.id, self.flag_string()) else: - return "%s(#%d%s)" % (ansi.parse_ansi(self.name.split(';')[0], strip_ansi=True),self.id, self.flag_string()) + return "%s(#%s%s)" % (ansi.parse_ansi(self.name.split(';')[0], strip_ansi=True), self.id, self.flag_string()) def get_ansiname(self, fullname=False): """ Returns an object's ANSI'd name. """ - if fullname: - return "%s(#%d%s)" % (ansi.parse_ansi(self.ansi_name), self.id, self.flag_string()) + if self.ansi_name: + if fullname: + return "%s(#%s%s)" % (ansi.parse_ansi(self.ansi_name), self.id, self.flag_string()) + else: + return "%s(#%s%s)" % (ansi.parse_ansi(self.ansi_name.split(';')[0]), self.id, self.flag_string()) else: - return "%s(#%d%s)" % (ansi.parse_ansi(self.ansi_name.split(';')[0]), self.id, self.flag_string()) + return self.get_name() def set_description(self, new_desc): """ @@ -492,6 +493,7 @@ class Object(models.Model): Moves the object to a new location. target: (Object) Reference to the object to move to. + quiet: (bool) If true, don't emit left/arrived messages. """ if not quiet: self.get_location().emit_to_contents("%s has left." % (self.get_ansiname(),), exclude=self) @@ -592,9 +594,10 @@ class Object(models.Model): Returns the flag string for an object. This abbreviates all of the flags set on the object into a list of single-character flag characters. """ - # TODO: Once we add a flag system, add the other flag types here. - type_string = global_defines.OBJECT_TYPES[self.type][1][0] - return type_string + # We have to cast this because the admin interface is really picky + # about tuple index types. Bleh. + otype = int(self.type) + return global_defines.OBJECT_TYPES[otype][1][0] import functions_db import session_mgr diff --git a/evennia/trunk/evennia.sql b/evennia/trunk/evennia.sql index d1c27b0700688bf71d8f5a23421b5718beaf77b8..63a84031cc560356f7b1ea24cf1b7de42db91011 100755 GIT binary patch delta 7695 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 ZQMTpM+2;RQGijDUxy6r%rwMU*`X8U0`l$c_ delta 1700 zcmY*ZZ)j6j6u;-5o4n*DY11~E)OPkIY1FQNG|gmZt5n@9#5?3bUKHI_=ioS!Jc*N`uh8Od)KV#>yGwz_r|0((Sc~+ zKrGs`wm;e*>z(s4CIUV*Zr+9uwT9Ad+(woMM13D2_Xys`>-ZCXgD0?pQ&_;A_!363 z8BrI%M9edfs5R$s5ASPGUx_(QpqSK zWz;B&S(8W&u9e~m+}^}sCAj5e@(C7hU=RjZLe7mUd*y68r-V!|mlZP~e@jV}f;G$v zSi>YQgGdluMz|W%X3B~dQ!bUp)A4diS6a)?7L+>k8a6A}MbzVGuo{@9Sy0BaX;aqC7kUCCrZzJuPfkQr8!bk; zsEj*nh$U$tjyeX<02)MND{!@^DPtx~Ew9vgzFe@?GiU>9xS4y_#GD;qMb7H^%P9p- z%wky>^)hD|44MUi(aMaRC*(Zj;a?i7s9*7qrISo=GJ!uIJVay2hc3kCLi5mQ_}a)F zLhe92T}w--Rn*`4d^jdf)!7AqXD7V7m0$W&smQGjI393!MkOiL`T?8lbrrzK` z=)N*;!sFVqk*lQyI6{6Nu&>rm&ymfXmO2{b4aFNF8P3}!@(e7pnfT}mZ zrTGB}@*VTrw0LgD#@VXpC?VRwsvj|Al*j|O2wu?#NfEbTklv?P=qx=z6LgT)!>y`% z7HDULi`TlKo%icD%#+tvL_#(agYdANldOi9YTa9WdI)F-u1&zqJ4`Ug7Dl+RcXL(! zmHKT6;EtHK-LzrDy7=JRKVu^v;lg_neYB6E&44NYbb1HB_r6y|*hyd~HsHak`U+^u z2Q$A53~_@M2qwR&O=*O^#D(vy5TIf3I6pRpf>T~K_72Fw4lB5g$Q$} rZy*vN+8^2oMdBn{*Vk8_B4P)@S