mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-25 16:56:10 -06:00
125890 fix group permission views
This commit is contained in:
parent
4da0b835fd
commit
2fdd834a66
43
netbox/templates/users/group.html
Normal file
43
netbox/templates/users/group.html
Normal 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 %}
|
43
netbox/templates/users/objectpermission.html
Normal file
43
netbox/templates/users/objectpermission.html
Normal 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 %}
|
81
netbox/templates/users/user.html
Normal file
81
netbox/templates/users/user.html
Normal 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 %}
|
@ -49,7 +49,7 @@ class UserFilterSet(BaseFilterSet):
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = NetBoxUser
|
||||
model = get_user_model()
|
||||
fields = ['id', 'username', 'first_name', 'last_name', 'email', 'is_staff', 'is_active']
|
||||
|
||||
def search(self, queryset, name, value):
|
||||
|
@ -146,34 +146,52 @@ class TokenForm(BootstrapMixin, forms.ModelForm):
|
||||
|
||||
class UserForm(BootstrapMixin, forms.ModelForm):
|
||||
groups = DynamicModelMultipleChoiceField(
|
||||
required=False,
|
||||
queryset=Group.objects.all()
|
||||
)
|
||||
object_permissions = DynamicModelMultipleChoiceField(
|
||||
required=False,
|
||||
label=_('Permissions'),
|
||||
queryset=ObjectPermission.objects.all()
|
||||
)
|
||||
|
||||
fieldsets = (
|
||||
('User', ('username', 'first_name', 'last_name', 'email', )),
|
||||
('Groups', ('groups', )),
|
||||
('Status', ('is_active', 'is_staff', 'is_superuser', )),
|
||||
('Important Dates', ('last_login', 'date_joined', )),
|
||||
('Permissions', ('object_permissions', )),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = NetBoxUser
|
||||
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',
|
||||
]
|
||||
|
||||
|
||||
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 = (
|
||||
('name', ),
|
||||
('', ('name', )),
|
||||
('Users', ('users', )),
|
||||
('Permissions', ('object_permissions', )),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = NetBoxGroup
|
||||
fields = [
|
||||
'name',
|
||||
'name', 'users', 'object_permissions',
|
||||
]
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@ import django_tables2 as tables
|
||||
from django_tables2.utils import A
|
||||
from .models import Token
|
||||
from netbox.tables import NetBoxTable, columns
|
||||
from users.models import NetBoxUser
|
||||
from users.models import NetBoxGroup, NetBoxUser
|
||||
|
||||
__all__ = (
|
||||
'GroupTable',
|
||||
@ -73,21 +73,21 @@ class UserTable(NetBoxTable):
|
||||
|
||||
|
||||
class GroupTable(NetBoxTable):
|
||||
username = tables.LinkColumn('users:netboxuser', args=[A('pk')])
|
||||
name = tables.LinkColumn('users:netboxgroup', args=[A('pk')])
|
||||
actions = columns.ActionsColumn(
|
||||
actions=('edit', 'delete'),
|
||||
)
|
||||
|
||||
class Meta(NetBoxTable.Meta):
|
||||
model = NetBoxUser
|
||||
model = NetBoxGroup
|
||||
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):
|
||||
username = tables.LinkColumn('users:netboxuser', args=[A('pk')])
|
||||
name = tables.LinkColumn('users:objectpermission', args=[A('pk')])
|
||||
actions = columns.ActionsColumn(
|
||||
actions=('edit', 'delete'),
|
||||
)
|
||||
@ -95,6 +95,6 @@ class ObjectPermissionTable(NetBoxTable):
|
||||
class Meta(NetBoxTable.Meta):
|
||||
model = NetBoxUser
|
||||
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',)
|
||||
|
@ -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.models import update_last_login
|
||||
from django.contrib.auth.signals import user_logged_in
|
||||
from django.db.models import Count
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404, redirect, render, resolve_url
|
||||
from django.urls import reverse
|
||||
@ -398,7 +399,7 @@ class NetBoxUserBulkDeleteView(generic.BulkDeleteView):
|
||||
|
||||
|
||||
class NetBoxGroupListView(generic.ObjectListView):
|
||||
queryset = NetBoxGroup.objects.all()
|
||||
queryset = NetBoxGroup.objects.all().annotate(users_count=Count('user'))
|
||||
filterset = filtersets.GroupFilterSet
|
||||
filterset_form = forms.GroupFilterForm
|
||||
table = tables.GroupTable
|
||||
@ -409,6 +410,11 @@ class NetBoxGroupView(generic.ObjectView):
|
||||
queryset = NetBoxGroup.objects.all()
|
||||
template_name = 'users/group.html'
|
||||
|
||||
def get_extra_context(self, request, instance):
|
||||
return {
|
||||
'active_tab': 'group',
|
||||
}
|
||||
|
||||
|
||||
@register_model_view(NetBoxGroup, 'edit')
|
||||
class NetBoxGroupEditView(generic.ObjectEditView):
|
||||
@ -455,6 +461,11 @@ class ObjectPermissionView(generic.ObjectView):
|
||||
queryset = NetBoxGroup.objects.all()
|
||||
template_name = 'users/objectpermission.html'
|
||||
|
||||
def get_extra_context(self, request, instance):
|
||||
return {
|
||||
'active_tab': 'objectpermission',
|
||||
}
|
||||
|
||||
|
||||
@register_model_view(ObjectPermission, 'edit')
|
||||
class ObjectPermissionEditView(generic.ObjectEditView):
|
||||
|
Loading…
Reference in New Issue
Block a user