ugly space management hack - will be improved later
This commit is contained in:
@ -7,6 +7,8 @@
|
||||
|
||||
{% block extra_head %}
|
||||
{{ form.media }}
|
||||
|
||||
{% include 'include/vue_base.html' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
@ -70,24 +72,72 @@
|
||||
<div class="col col-md-12">
|
||||
{% if space_users %}
|
||||
<table class="table table-bordered">
|
||||
<tr>
|
||||
<tr>
|
||||
<th>{% trans 'User' %}</th>
|
||||
<th>{% trans 'Groups' %}</th>
|
||||
<th>{% trans 'Edit' %}</th>
|
||||
</tr>
|
||||
</tr>
|
||||
{% for u in space_users %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ u.user.username }}
|
||||
</td>
|
||||
<td>
|
||||
<a class="btn btn-success btn-sm" href="">{% trans 'Remove' %}</a>
|
||||
{{ u.user.groups.all |join:", " }}
|
||||
</td>
|
||||
<td>
|
||||
<div class="input-group mb-3">
|
||||
|
||||
<select v-model="users['{{ u.pk }}']" class="custom-select">
|
||||
<option>{% trans 'admin' %}</option>
|
||||
<option>{% trans 'user' %}</option>
|
||||
<option>{% trans 'guest' %}</option>
|
||||
<option>{% trans 'remove' %}</option>
|
||||
</select>
|
||||
<div class="input-group-append">
|
||||
|
||||
<a class="btn btn-warning"
|
||||
:href="editUserUrl({{ u.pk }}, {{ u.space.pk }})">{% trans 'Update' %}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
{% else %}
|
||||
<p>{% trans 'There are no members in your space yet!' %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block script %}
|
||||
|
||||
<script type="application/javascript">
|
||||
let app = new Vue({
|
||||
delimiters: ['[[', ']]'],
|
||||
el: '#id_base_container',
|
||||
data: {
|
||||
users: {
|
||||
{% for u in space_users %}
|
||||
'{{ u.pk }}': 'none',
|
||||
{% endfor %}
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
|
||||
},
|
||||
methods: {
|
||||
editUserUrl: function (user_id, space_id) {
|
||||
return '{% url 'change_space_member' 1234 5678 'role' %}'.replace('1234', user_id).replace('5678', space_id).replace('role', this.users[user_id])
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
@ -42,6 +42,7 @@ urlpatterns = [
|
||||
path('', views.index, name='index'),
|
||||
path('setup/', views.setup, name='view_setup'),
|
||||
path('space/', views.space, name='view_space'),
|
||||
path('space/member/<int:user_id>/<int:space_id>/<slug:group>', views.space_change_member, name='change_space_member'),
|
||||
path('no-group', views.no_groups, name='view_no_group'),
|
||||
path('no-space', views.no_space, name='view_no_space'),
|
||||
path('no-perm', views.no_perm, name='view_no_perm'),
|
||||
|
@ -431,6 +431,7 @@ def signup(request, token):
|
||||
|
||||
link.used_by = request.user
|
||||
link.save()
|
||||
request.user.groups.clear()
|
||||
request.user.groups.add(link.group)
|
||||
|
||||
request.user.userpreference.space = link.space
|
||||
@ -461,6 +462,8 @@ def signup(request, token):
|
||||
|
||||
link.used_by = user
|
||||
link.save()
|
||||
|
||||
request.user.groups.clear()
|
||||
user.groups.add(link.group)
|
||||
|
||||
user.userpreference.space = link.space
|
||||
@ -501,6 +504,34 @@ def space(request):
|
||||
return render(request, 'space.html', {'space_users': space_users, 'counts': counts})
|
||||
|
||||
|
||||
# TODO super hacky and quick solution, safe but needs rework
|
||||
# TODO move group settings to space to prevent permissions from one space to move to another
|
||||
@group_required('admin')
|
||||
def space_change_member(request, user_id, space_id, group):
|
||||
m_space = get_object_or_404(Space, pk=space_id)
|
||||
m_user = get_object_or_404(User, pk=user_id)
|
||||
if request.user == m_space.created_by and m_user != m_space.created_by:
|
||||
if m_user.userpreference.space == m_space:
|
||||
if group == 'admin':
|
||||
m_user.groups.clear()
|
||||
m_user.groups.add(Group.objects.get(name='admin'))
|
||||
return HttpResponseRedirect(reverse('view_space'))
|
||||
if group == 'user':
|
||||
m_user.groups.clear()
|
||||
m_user.groups.add(Group.objects.get(name='user'))
|
||||
return HttpResponseRedirect(reverse('view_space'))
|
||||
if group == 'guest':
|
||||
m_user.groups.clear()
|
||||
m_user.groups.add(Group.objects.get(name='guest'))
|
||||
return HttpResponseRedirect(reverse('view_space'))
|
||||
if group == 'remove':
|
||||
m_user.groups.clear()
|
||||
m_user.userpreference.space = None
|
||||
m_user.userpreference.save()
|
||||
return HttpResponseRedirect(reverse('view_space'))
|
||||
return HttpResponseRedirect(reverse('view_space'))
|
||||
|
||||
|
||||
def markdown_info(request):
|
||||
return render(request, 'markdown_info.html', {})
|
||||
|
||||
|
Reference in New Issue
Block a user