130 lines
6.2 KiB
HTML
130 lines
6.2 KiB
HTML
{% extends "module_base.html" %}
|
|
{% load static %}
|
|
|
|
{% block title %}Create Role{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-md-8">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h4 class="card-title mb-0">
|
|
<i class="fas fa-user-tag me-2"></i>Create New Role
|
|
</h4>
|
|
<div class="card-tools">
|
|
<a href="{% url 'accounts:role_list' %}" class="btn btn-secondary btn-sm">
|
|
<i class="fas fa-arrow-left"></i> Back to List
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<div class="card-body">
|
|
<form method="post">
|
|
{% csrf_token %}
|
|
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<h5>Basic Information</h5>
|
|
|
|
<div class="mb-3">
|
|
<label for="name" class="form-label">Role Name *</label>
|
|
<input type="text" class="form-control" id="name" name="name" required>
|
|
<div class="form-text">Required. Unique name for this role.</div>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="description" class="form-label">Description</label>
|
|
<textarea class="form-control" id="description" name="description" rows="3"></textarea>
|
|
<div class="form-text">Optional description of this role's purpose.</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<h5>Assign Permissions</h5>
|
|
<div class="mb-3">
|
|
{% if permissions %}
|
|
<div class="permissions-list" style="max-height: 300px; overflow-y: auto; border: 1px solid #dee2e6; padding: 10px; border-radius: 5px;">
|
|
{% regroup permissions by module as module_list %}
|
|
{% for module in module_list %}
|
|
<h6 class="mt-3 mb-2">
|
|
<i class="fas fa-folder"></i> {{ module.grouper|title }}
|
|
</h6>
|
|
{% for permission in module.list %}
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" id="perm_{{ permission.id }}" name="permissions" value="{{ permission.id }}">
|
|
<label class="form-check-label" for="perm_{{ permission.id }}">
|
|
<strong>{{ permission.name }}</strong>
|
|
<br>
|
|
<small class="text-muted">{{ permission.description|default:"" }}</small>
|
|
</label>
|
|
</div>
|
|
{% endfor %}
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<p class="text-muted">No permissions available.</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<button type="submit" class="btn btn-primary">
|
|
<i class="fas fa-save me-2"></i>Create Role
|
|
</button>
|
|
<a href="{% url 'accounts:role_list' %}" class="btn btn-secondary">
|
|
<i class="fas fa-times me-2"></i>Cancel
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-4">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Role Creation Guidelines</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<h6>Role Naming:</h6>
|
|
<ul class="small">
|
|
<li>Use clear, descriptive names</li>
|
|
<li>Use underscores for multi-word names</li>
|
|
<li>Keep names concise but meaningful</li>
|
|
</ul>
|
|
|
|
<h6>Permission Assignment:</h6>
|
|
<ul class="small">
|
|
<li>Assign minimal required permissions</li>
|
|
<li>Group related permissions together</li>
|
|
<li>Consider principle of least privilege</li>
|
|
</ul>
|
|
|
|
<h6>Best Practices:</h6>
|
|
<ul class="small">
|
|
<li>Document role purpose in description</li>
|
|
<li>Review permissions regularly</li>
|
|
<li>Test role functionality after creation</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
// Add some interactivity to permission checkboxes
|
|
const checkboxes = document.querySelectorAll('input[name="permissions"]');
|
|
checkboxes.forEach(checkbox => {
|
|
checkbox.addEventListener('change', function() {
|
|
// You could add logic here to select/deselect related permissions
|
|
console.log('Permission changed:', this.id);
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
{% endblock %} |