Commit 4db444d5 by David Ormsbee

Merge pull request #956 from MITx/feature/rocha/user-admin-commands

Add some extra console commands for handling user permissions
parents be947770 3e2cf187
from optparse import make_option
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User, Group
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--list',
action='store_true',
dest='list',
default=False,
help='List available groups'),
make_option('--create',
action='store_true',
dest='create',
default=False,
help='Create the group if it does not exist'),
make_option('--remove',
action='store_true',
dest='remove',
default=False,
help='Remove the user from the group instead of adding it'),
)
args = '<user|email> <group>'
help = 'Add a user to a group'
def print_groups(self):
print 'Groups available:'
for group in Group.objects.all().distinct():
print ' ', group.name
def handle(self, *args, **options):
if options['list']:
self.print_groups()
return
if len(args) != 2:
raise CommandError('Usage is add_to_group {0}'.format(self.args))
name_or_email, group_name = args
if '@' in name_or_email:
user = User.objects.get(email=name_or_email)
else:
user = User.objects.get(username=name_or_email)
try:
group = Group.objects.get(name=group_name)
except Group.DoesNotExist:
if options['create']:
group = Group(name=group_name)
group.save()
else:
raise CommandError('Group {} does not exist'.format(group_name))
if options['remove']:
user.groups.remove(group)
else:
user.groups.add(group)
print 'Success!'
from optparse import make_option
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
import re import re
class Command(BaseCommand): class Command(BaseCommand):
option_list = BaseCommand.option_list + (
args = '<user/email user/email ...>' make_option('--unset',
action='store_true',
dest='unset',
default=False,
help='Set is_staff to False instead of True'),
)
args = '<user|email> [user|email ...]>'
help = """ help = """
This command will set isstaff to true for one or more users. This command will set is_staff to true for one or more users.
Lookup by username or email address, assumes usernames Lookup by username or email address, assumes usernames
do not look like email addresses. do not look like email addresses.
""" """
def handle(self, *args, **kwargs): def handle(self, *args, **options):
if len(args) < 1: if len(args) < 1:
print Command.help raise CommandError('Usage is set_staff {0}'.format(self.args))
return
for user in args: for user in args:
if re.match('[^@]+@[^@]+\.[^@]+', user): if re.match('[^@]+@[^@]+\.[^@]+', user):
try: try:
v = User.objects.get(email=user) v = User.objects.get(email=user)
except: except:
raise CommandError("User {0} does not exist".format( raise CommandError("User {0} does not exist".format(user))
user))
else: else:
try: try:
v = User.objects.get(username=user) v = User.objects.get(username=user)
except: except:
raise CommandError("User {0} does not exist".format( raise CommandError("User {0} does not exist".format(user))
user))
if options['unset']:
v.is_staff = False
else:
v.is_staff = True
v.is_staff = True
v.save() v.save()
print 'Success!'
from optparse import make_option
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from django_comment_client.models import Permission, Role from django_comment_client.models import Role
from django.contrib.auth.models import User from django.contrib.auth.models import User
class Command(BaseCommand): class Command(BaseCommand):
args = 'user role course_id' option_list = BaseCommand.option_list + (
help = 'Assign a role to a user' make_option('--remove',
action='store_true',
dest='remove',
default=False,
help='Remove the role instead of adding it'),
)
args = '<user|email> <role> <course_id>'
help = 'Assign a discussion forum role to a user '
def handle(self, *args, **options): def handle(self, *args, **options):
role = Role.objects.get(name=args[1], course_id=args[2]) if len(args) != 3:
raise CommandError('Usage is assign_role {0}'.format(self.args))
name_or_email, role, course_id = args
role = Role.objects.get(name=role, course_id=course_id)
if '@' in name_or_email:
user = User.objects.get(email=name_or_email)
else:
user = User.objects.get(username=name_or_email)
if '@' in args[0]: if options['remove']:
user = User.objects.get(email=args[0]) user.roles.remove(role)
else: else:
user = User.objects.get(username=args[0]) user.roles.add(role)
user.roles.add(role) print 'Success!'
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment