125890 fix group permission views

This commit is contained in:
Arthur 2023-06-09 11:05:31 -07:00
parent 4da0b835fd
commit 2fdd834a66
7 changed files with 209 additions and 13 deletions

View File

@ -0,0 +1,43 @@
{% extends 'users/base.html' %}
{% load helpers %}
{% load render_table from django_tables2 %}
{% block title %}Group Detail{% endblock %}
{% block tabs %}
<ul class="nav nav-tabs px-3">
<li role="presentation" class="nav-item">
<a class="nav-link{% if active_tab == 'group' %} active{% endif %}" href="{% url 'users:netboxgroup' pk=object.pk %}">Group</a>
</li>
</ul>
{% endblock tabs %}
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="card">
<h5 class="card-header">Account Details</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Name</th>
<td>{{ object.name }}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<h5 class="card-header">Assigned Groups</h5>
<ul class="list-group list-group-flush">
{% for group in request.user.groups.all %}
<li class="list-group-item">{{ group }}</li>
{% empty %}
<li class="list-group-item text-muted">None</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,43 @@
{% extends 'users/base.html' %}
{% load helpers %}
{% load render_table from django_tables2 %}
{% block title %}Permission Detail{% endblock %}
{% block tabs %}
<ul class="nav nav-tabs px-3">
<li role="presentation" class="nav-item">
<a class="nav-link{% if active_tab == 'objectpermission' %} active{% endif %}" href="{% url 'users:objectpermission' pk=object.pk %}">Permission</a>
</li>
</ul>
{% endblock tabs %}
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="card">
<h5 class="card-header">Account Details</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Name</th>
<td>{{ object.name }}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<h5 class="card-header">Assigned Groups</h5>
<ul class="list-group list-group-flush">
{% for group in request.user.groups.all %}
<li class="list-group-item">{{ group }}</li>
{% empty %}
<li class="list-group-item text-muted">None</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,81 @@
{% extends 'users/base.html' %}
{% load helpers %}
{% load render_table from django_tables2 %}
{% block title %}User Detail{% endblock %}
{% block tabs %}
<ul class="nav nav-tabs px-3">
<li role="presentation" class="nav-item">
<a class="nav-link{% if active_tab == 'user' %} active{% endif %}" href="{% url 'users:netboxuser' pk=object.pk %}">User</a>
</li>
</ul>
{% endblock tabs %}
{% block content %}
<div class="row mb-3">
<div class="col-md-6">
<div class="card">
<h5 class="card-header">Account Details</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Username</th>
<td>{{ object.username }}</td>
</tr>
<tr>
<th scope="row">Full Name</th>
<td>
{% if object.first_name or object.last_name %}
{{ object.first_name }} {{ object.last_name }}
{% else %}
{{ ''|placeholder }}
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Email</th>
<td>{{ object.email|placeholder }}</td>
</tr>
<tr>
<th scope="row">Account Created</th>
<td>{{ object.date_joined|annotated_date }}</td>
</tr>
<tr>
<th scope="row">Superuser</th>
<td>{% checkmark object.is_superuser %}</td>
</tr>
<tr>
<th scope="row">Admin Access</th>
<td>{% checkmark object.is_staff %}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<h5 class="card-header">Assigned Groups</h5>
<ul class="list-group list-group-flush">
{% for group in object.groups.all %}
<li class="list-group-item">{{ group }}</li>
{% empty %}
<li class="list-group-item text-muted">None</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% if perms.extras.view_objectchange %}
<div class="row">
<div class="col-md-12">
<div class="card">
<h5 class="card-header text-center">Recent Activity</h5>
<div class="card-body table-responsive">
{% render_table changelog_table 'inc/table.html' %}
</div>
</div>
</div>
</div>
{% endif %}
{% endblock %}

View File

@ -49,7 +49,7 @@ class UserFilterSet(BaseFilterSet):
) )
class Meta: class Meta:
model = NetBoxUser model = get_user_model()
fields = ['id', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active'] fields = ['id', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active']
def search(self, queryset, name, value): def search(self, queryset, name, value):

View File

@ -146,34 +146,52 @@ class TokenForm(BootstrapMixin, forms.ModelForm):
class UserForm(BootstrapMixin, forms.ModelForm): class UserForm(BootstrapMixin, forms.ModelForm):
groups = DynamicModelMultipleChoiceField( groups = DynamicModelMultipleChoiceField(
required=False,
queryset=Group.objects.all() queryset=Group.objects.all()
) )
object_permissions = DynamicModelMultipleChoiceField(
required=False,
label=_('Permissions'),
queryset=ObjectPermission.objects.all()
)
fieldsets = ( fieldsets = (
('User', ('username', 'first_name', 'last_name', 'email', )), ('User', ('username', 'first_name', 'last_name', 'email', )),
('Groups', ('groups', )), ('Groups', ('groups', )),
('Status', ('is_active', 'is_staff', 'is_superuser', )), ('Status', ('is_active', 'is_staff', 'is_superuser', )),
('Important Dates', ('last_login', 'date_joined', )), ('Important Dates', ('last_login', 'date_joined', )),
('Permissions', ('object_permissions', )),
) )
class Meta: class Meta:
model = NetBoxUser model = NetBoxUser
fields = [ fields = [
'username', 'first_name', 'last_name', 'email', 'groups', 'username', 'first_name', 'last_name', 'email', 'groups', 'object_permissions',
'is_active', 'is_staff', 'is_superuser', 'last_login', 'date_joined', 'is_active', 'is_staff', 'is_superuser', 'last_login', 'date_joined',
] ]
class GroupForm(BootstrapMixin, forms.ModelForm): class GroupForm(BootstrapMixin, forms.ModelForm):
users = DynamicModelMultipleChoiceField(
required=False,
queryset=get_user_model().objects.all()
)
object_permissions = DynamicModelMultipleChoiceField(
required=False,
label=_('Permissions'),
queryset=ObjectPermission.objects.all()
)
fieldsets = ( fieldsets = (
('name', ), ('', ('name', )),
('Users', ('users', )),
('Permissions', ('object_permissions', )),
) )
class Meta: class Meta:
model = NetBoxGroup model = NetBoxGroup
fields = [ fields = [
'name', 'name', 'users', 'object_permissions',
] ]

View File

@ -2,7 +2,7 @@ import django_tables2 as tables
from django_tables2.utils import A from django_tables2.utils import A
from .models import Token from .models import Token
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, columns
from users.models import NetBoxUser from users.models import NetBoxGroup, NetBoxUser
__all__ = ( __all__ = (
'GroupTable', 'GroupTable',
@ -73,21 +73,21 @@ class UserTable(NetBoxTable):
class GroupTable(NetBoxTable): class GroupTable(NetBoxTable):
username = tables.LinkColumn('users:netboxuser', args=[A('pk')]) name = tables.LinkColumn('users:netboxgroup', args=[A('pk')])
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
actions=('edit', 'delete'), actions=('edit', 'delete'),
) )
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = NetBoxUser model = NetBoxGroup
fields = ( fields = (
'pk', 'id', 'username', 'email', 'first_name', 'last_name', 'is_superuser', 'is_staff', 'is_active' 'pk', 'id', 'name', 'users_count',
) )
default_columns = ('pk', 'username', 'email', 'first_name', 'last_name', 'is_superuser') default_columns = ('pk', 'name', 'users_count', )
class ObjectPermissionTable(NetBoxTable): class ObjectPermissionTable(NetBoxTable):
username = tables.LinkColumn('users:netboxuser', args=[A('pk')]) name = tables.LinkColumn('users:objectpermission', args=[A('pk')])
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
actions=('edit', 'delete'), actions=('edit', 'delete'),
) )
@ -95,6 +95,6 @@ class ObjectPermissionTable(NetBoxTable):
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = NetBoxUser model = NetBoxUser
fields = ( fields = (
'pk', 'id', 'username', 'email', 'first_name', 'last_name', 'is_superuser', 'is_staff', 'is_active' 'pk', 'id', 'name', 'enabled', 'actions', 'constraints',
) )
default_columns = ('pk', 'username', 'email', 'first_name', 'last_name', 'is_superuser') default_columns = ('pk', 'name', 'enabled', 'actions', 'constraints',)

View File

@ -6,6 +6,7 @@ from django.contrib.auth import login as auth_login, logout as auth_logout, upda
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import update_last_login from django.contrib.auth.models import update_last_login
from django.contrib.auth.signals import user_logged_in from django.contrib.auth.signals import user_logged_in
from django.db.models import Count
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render, resolve_url from django.shortcuts import get_object_or_404, redirect, render, resolve_url
from django.urls import reverse from django.urls import reverse
@ -398,7 +399,7 @@ class NetBoxUserBulkDeleteView(generic.BulkDeleteView):
class NetBoxGroupListView(generic.ObjectListView): class NetBoxGroupListView(generic.ObjectListView):
queryset = NetBoxGroup.objects.all() queryset = NetBoxGroup.objects.all().annotate(users_count=Count('user'))
filterset = filtersets.GroupFilterSet filterset = filtersets.GroupFilterSet
filterset_form = forms.GroupFilterForm filterset_form = forms.GroupFilterForm
table = tables.GroupTable table = tables.GroupTable
@ -409,6 +410,11 @@ class NetBoxGroupView(generic.ObjectView):
queryset = NetBoxGroup.objects.all() queryset = NetBoxGroup.objects.all()
template_name = 'users/group.html' template_name = 'users/group.html'
def get_extra_context(self, request, instance):
return {
'active_tab': 'group',
}
@register_model_view(NetBoxGroup, 'edit') @register_model_view(NetBoxGroup, 'edit')
class NetBoxGroupEditView(generic.ObjectEditView): class NetBoxGroupEditView(generic.ObjectEditView):
@ -455,6 +461,11 @@ class ObjectPermissionView(generic.ObjectView):
queryset = NetBoxGroup.objects.all() queryset = NetBoxGroup.objects.all()
template_name = 'users/objectpermission.html' template_name = 'users/objectpermission.html'
def get_extra_context(self, request, instance):
return {
'active_tab': 'objectpermission',
}
@register_model_view(ObjectPermission, 'edit') @register_model_view(ObjectPermission, 'edit')
class ObjectPermissionEditView(generic.ObjectEditView): class ObjectPermissionEditView(generic.ObjectEditView):