- Implemented permission system management inside the game

- changed @chperm to @setperm to avoid confusion with channel commands
- added @setgroup command for adding user group permissions
- Moved permissions/group setup into settings file to allow admins to tweak without going into evennia engine.
- Add all new players to default permission group (defined in settings)
- Defined a basic group hierarchy, removed permission 'genperms.builder' in favour of a group named builders instead, containing all relevant permissions.
- Filtered out all django's automatic permissions in @setperm/list to make permission system more controlled by admin.
- Probably fixed bug that caused new users to not be signed up to channels (more testing needed)
- Added Exception handler in unloggedin method create, this was killing tracebacks upon user creation.
/Griatch
This commit is contained in:
Griatch 2009-10-03 14:40:34 +00:00
parent 77f2186d9a
commit 7f7306a6e4
23 changed files with 341 additions and 214 deletions

View file

@ -5,13 +5,12 @@ other things.
Everything starts at handle_setup()
"""
from django.contrib.auth.models import User, Group
from django.contrib.auth.models import User, Group, Permission
from django.core import management
from django.conf import settings
from src.objects.models import Object
from src.config.models import ConfigValue, CommandAlias, ConnectScreen
from src import comsys, defines_global
from src import comsys, defines_global, logger
def get_god_user():
"""
Returns the initially created 'god' User object.
@ -54,13 +53,21 @@ def create_objects():
def create_groups():
"""
Creates the default permissions groups.
Creates the default permissions groups and assign permissions to each as defined in settings.
"""
groups = ("Immortals", "Wizards", "Builders", "Player Helpers")
for group in groups:
for group_name, perm_tuple in settings.PERM_GROUPS.items():
newgroup = Group()
newgroup.name = group
newgroup.name = group_name
newgroup.save()
for perm_string in perm_tuple:
#assign permissions to the group
app_label, codename = perm_string.split(".",1)
try:
permission = Permission.objects.filter(content_type__app_label=app_label).get(codename=codename)
except Permission.DoesNotExist:
logger.log_errmsg("Initial_setup: Permission %s is not defined." % perm_string)
continue
newgroup.permissions.add(permission)
def create_channels():
"""