ugly space management hack - will be improved later

This commit is contained in:
vabene1111
2021-05-28 18:19:53 +02:00
parent 50572e9a36
commit 71fdfe6acb
3 changed files with 84 additions and 2 deletions

View File

@ -7,6 +7,8 @@
{% block extra_head %} {% block extra_head %}
{{ form.media }} {{ form.media }}
{% include 'include/vue_base.html' %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
@ -70,24 +72,72 @@
<div class="col col-md-12"> <div class="col col-md-12">
{% if space_users %} {% if space_users %}
<table class="table table-bordered"> <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 %} {% for u in space_users %}
<tr> <tr>
<td> <td>
{{ u.user.username }} {{ u.user.username }}
</td> </td>
<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> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
{% else %} {% else %}
<p>{% trans 'There are no members in your space yet!' %}</p> <p>{% trans 'There are no members in your space yet!' %}</p>
{% endif %} {% endif %}
</div> </div>
</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 %} {% endblock %}

View File

@ -42,6 +42,7 @@ urlpatterns = [
path('', views.index, name='index'), path('', views.index, name='index'),
path('setup/', views.setup, name='view_setup'), path('setup/', views.setup, name='view_setup'),
path('space/', views.space, name='view_space'), 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-group', views.no_groups, name='view_no_group'),
path('no-space', views.no_space, name='view_no_space'), path('no-space', views.no_space, name='view_no_space'),
path('no-perm', views.no_perm, name='view_no_perm'), path('no-perm', views.no_perm, name='view_no_perm'),

View File

@ -431,6 +431,7 @@ def signup(request, token):
link.used_by = request.user link.used_by = request.user
link.save() link.save()
request.user.groups.clear()
request.user.groups.add(link.group) request.user.groups.add(link.group)
request.user.userpreference.space = link.space request.user.userpreference.space = link.space
@ -461,6 +462,8 @@ def signup(request, token):
link.used_by = user link.used_by = user
link.save() link.save()
request.user.groups.clear()
user.groups.add(link.group) user.groups.add(link.group)
user.userpreference.space = link.space user.userpreference.space = link.space
@ -501,6 +504,34 @@ def space(request):
return render(request, 'space.html', {'space_users': space_users, 'counts': counts}) 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): def markdown_info(request):
return render(request, 'markdown_info.html', {}) return render(request, 'markdown_info.html', {})