The BNSD1 system uses Django's built-in permissions framework to control user access to different features and data. As a system administrator, you can grant or revoke permissions to individual users or groups.
Each model in the system has four default permissions:
view_*) - View records in the admin interfaceadd_*) - Create new recordschange_*) - Edit existing recordsdelete_*) - Delete recordsCompanies & Persons:
- companies.view_companies - View company records
- companies.add_companies - Show "+ Add Company" button
- companies.change_companies - Allow editing companies via clickable IDs
- companies.delete_companies - Delete companies
- companies.view_persons - View person records
- companies.add_persons - Show "+ Add Person" button
- companies.change_persons - Allow editing persons via clickable IDs
- companies.delete_persons - Delete persons
Projects:
- projects.view_project - View project records
- projects.add_project - Show "+ Add Project" button
- projects.change_project - Allow editing projects via clickable IDs
- projects.delete_project - Delete projects
- projects.view_projectcategories - View project-category mappings
- projects.add_projectcategories - Show "+ Add Mapping" button
- projects.change_projectcategories - Allow editing project-category mappings
- projects.delete_projectcategories - Delete mappings
Questions:
- questions.view_question - View questions
- questions.add_question - Create new questions
- questions.change_question - Edit questions in Manage Questions view
- questions.delete_question - Delete questions
- questions.view_questioncategories - View question categories
- questions.add_questioncategories - Add question categories
- questions.change_questioncategories - Edit question categories
- questions.delete_questioncategories - Delete categories
The system includes pre-configured groups for common access patterns. These groups are created using management commands and provide consistent permission sets.
These groups have complete CRUD (Create, Read, Update, Delete) permissions:
Admin Projects
- projects.view_project
- projects.add_project
- projects.change_project
- projects.delete_project
Admin Project Categories
- projects.view_projectcategories
- projects.add_projectcategories
- projects.change_projectcategories
- projects.delete_projectcategories
Admin Companies
- companies.view_companies
- companies.add_companies
- companies.change_companies
- companies.delete_companies
Admin Persons
- companies.view_persons
- companies.add_persons
- companies.change_persons
- companies.delete_persons
Admin Questions
- questions.view_questions
- questions.add_questions
- questions.change_questions
- questions.delete_questions
Admin Question Types
- questions.view_questiontypes
- questions.add_questiontypes
- questions.change_questiontypes
- questions.delete_questiontypes
Admin Question Roles
- questions.view_questionroles
- questions.add_questionroles
- questions.change_questionroles
- questions.delete_questionroles
Admin Question Categories
- questions.view_questioncategories
- questions.add_questioncategories
- questions.change_questioncategories
- questions.delete_questioncategories
Usage: Assign these groups to department administrators, data entry staff, and project managers who need full control.
These groups only have view permissions:
View Projects
- projects.view_project
View Project Categories
- projects.view_projectcategories
View Companies
- companies.view_companies
View Persons
- companies.view_persons
View Questions
- questions.view_questions
View Question Types
- questions.view_questiontypes
View Question Roles
- questions.view_questionroles
View Question Categories
- questions.view_questioncategories
Usage: Assign these groups to external stakeholders, auditors, reporting staff, and anyone who needs to see data but not modify it.
Run these management commands to create all groups:
python manage.py create_project_groups
python manage.py create_project_category_groups
python manage.py create_company_groups
python manage.py create_person_groups
python manage.py create_question_groups
python manage.py create_question_type_groups
python manage.py create_question_role_groups
python manage.py create_question_category_groups
See Permission-Based Views Guide for detailed information about how these groups control UI behavior.
http://your-domain.com/admin/Login with superuser credentials
Select User
Click on the username you want to modify
Assign Permissions
Ctrl (Windows/Linux) or Cmd (Mac)Move selected permissions from "Available" to "Chosen" using the arrow buttons
Save Changes
is_staff): Allows login to Django Adminis_superuser): Grants ALL permissions automaticallyTo grant superuser: 1. Edit user in Django Admin 2. Check Superuser status checkbox 3. Save
Groups allow you to assign permissions to multiple users at once.
Click Add Group
Name the Group
Examples: "Editors", "Viewers", "Project Managers", "Read Only"
Assign Permissions
Admin Groups (Pre-Configured): - Admin Projects - Full CRUD on projects - Admin Project Categories - Full CRUD on project-category mappings - Admin Companies - Full CRUD on companies - Admin Persons - Full CRUD on persons
View Groups (Pre-Configured): - View Projects - Read-only access to projects - View Project Categories - Read-only access to mappings - View Companies - Read-only access to companies - View Persons - Read-only access to persons
Custom Group Examples:
Read Only Users (All Modules): Add user to all four View groups: - View Projects - View Project Categories - View Companies - View Persons
Editors (All Modules): Add user to all four Admin groups: - Admin Projects - Admin Project Categories - Admin Companies - Admin Persons
Data Entry (Companies/Persons Only): Add user to: - Admin Companies - Admin Persons - View Projects (read-only) - View Project Categories (read-only)
Project Managers:
Add user to:
- Admin Projects
- Admin Project Categories
- View Companies (read-only)
- View Persons (read-only)
- questions.view_question (individual permission)
Navigate to user's edit page
Assign Groups
Move to "Chosen groups"
Save
A user's final permissions are the union of all sources above.
/companies/companies/manage/ - Check if "+ Add Company" button appearsadd_* permissionchange_* permission# From terminal in backend directory
python manage.py shell
# Check permissions for a user
from django.contrib.auth.models import User
user = User.objects.get(username='johndoe')
# Check specific permission
user.has_perm('companies.add_companies') # Returns True/False
# List all user permissions
user.get_all_permissions()
Django uses: <app_label>.<permission_codename>
Examples:
- companies.add_companies
- projects.change_project
- questions.delete_question
projects.view_projectquestions.view_questioncompanies.add_companiescompanies.change_companiescompanies.add_personscompanies.change_personsProblem: User redirected when accessing /admin/
Solution:
- Ensure Staff status checkbox is enabled
- User must have is_staff=True
Problem: ID numbers not clickable, no edit dialog
Solution:
- Grant change_* permission for that model
- Example: companies.change_companies
Problem: "+ Add Company" button missing
Solution:
- Grant add_* permission for that model
- Example: companies.add_companies
Problem: Granted permissions but user still cannot access
Solution: - Ask user to logout and login again - Permissions are cached in session - Or restart Django development server
The DRF API endpoints also enforce permissions:
IsAuthenticated)POST permissionPATCH/PUT permissionDELETE permissionAPI permissions are enforced server-side in ViewSets automatically.
If you need custom permissions beyond the default ones:
class Companies(BaseModel):
class Meta:
permissions = [
("approve_company", "Can approve company applications"),
("export_company_data", "Can export company data"),
]
if request.user.has_perm('companies.approve_company'):
# Allow approval
pass
Custom permissions appear in the permissions list alongside default ones.
| Task | Permission Required |
|---|---|
| Companies | |
| View companies | companies.view_companies |
| Add new company | companies.add_companies |
| Edit company details | companies.change_companies |
| Delete company | companies.delete_companies |
| Persons | |
| View persons | companies.view_persons |
| Add new person | companies.add_persons |
| Edit person details | companies.change_persons |
| Delete person | companies.delete_persons |
| Projects | |
| View projects | projects.view_project |
| Add new project | projects.add_project |
| Edit project details | projects.change_project |
| Delete project | projects.delete_project |
| Project Categories | |
| View mappings | projects.view_projectcategories |
| Map project to category | projects.add_projectcategories |
| Edit project-category mapping | projects.change_projectcategories |
| Delete mapping | projects.delete_projectcategories |
| Questions | |
| View questions | questions.view_question |
| Add new question | questions.add_question |
| Edit question | questions.change_question |
| Delete question | questions.delete_question |
| Question Types | |
| View question types | questions.view_questiontypes |
| Add question type | questions.add_questiontypes |
| Edit question type | questions.change_questiontypes |
| Delete question type | questions.delete_questiontypes |
| Question Roles | |
| View question roles | questions.view_questionroles |
| Add question role | questions.add_questionroles |
| Edit question role | questions.change_questionroles |
| Delete question role | questions.delete_questionroles |
| Question Categories | |
| View question categories | questions.view_questioncategories |
| Add question category | questions.add_questioncategories |
| Edit question category | questions.change_questioncategories |
| Delete question category | questions.delete_questioncategories |
| Admin Access | |
| Access Django Admin | is_staff = True |
| All permissions | is_superuser = True |
| Group Name | Permissions | Use Case |
|---|---|---|
| Admin Projects | view, add, change, delete projects | Project managers, administrators |
| View Projects | view projects only | Read-only stakeholders |
| Admin Project Categories | view, add, change, delete mappings | Project administrators |
| View Project Categories | view mappings only | Read-only stakeholders |
| Admin Companies | view, add, change, delete companies | Company data managers |
| View Companies | view companies only | External auditors |
| Admin Persons | view, add, change, delete persons | HR, data entry staff |
| View Persons | view persons only | Reporting staff |
| Admin Questions | view, add, change, delete questions | Question managers |
| View Questions | view questions only | Read-only users |
| Admin Question Types | view, add, change, delete types | Question administrators |
| View Question Types | view types only | Read-only users |
| Admin Question Roles | view, add, change, delete roles | Question administrators |
| View Question Roles | view roles only | Read-only users |
| Admin Question Categories | view, add, change, delete categories | Question administrators |
| View Question Categories | view categories only | Read-only users |
Last Updated: January 2025
Version: 2.0
Related: Permission-Based Views Guide