Usergroup Documentation
User Group Controller Documentation
File: /controllers/usergroupController.php
Purpose: Manages user groups, roles, permissions, and access control policies
Last Updated: December 19, 2024
Total Functions: 12
Lines of Code: ~940
---
๐ Overview
The User Group Controller is the core component for managing user roles and permissions in the ERP system. It handles:
- โข Creating and editing user groups (roles)
- โข Managing permission sets and access control
- โข Property-based permission system
- โข Business rule configuration
- โข Restaurant/POS specific permissions
- โข Financial and operational restrictions
- โข UI customization per role
- โข Permission inheritance and copying
- โข Bulk operations on user groups
Primary Functions
- โ Create new user groups with permissions
- โ Edit existing user groups and permissions
- โ Copy user groups with full permission sets
- โ Soft delete/restore user groups
- โ Bulk operations on multiple groups
- โ Property-based permission management
- โ Restaurant/kitchen specific settings
- โ Financial control settings
- โ UI behavior customization
- โ Access control for different modules
Related Controllers
- โข userController.php - User account management
- โข sellbillController.php - Sales operations
- โข buyBillController.php - Purchase operations
- โข productController.php - Product management
- โข storeController.php - Store management
- โข clientController.php - Customer management
- โข supplierController.php - Supplier management
- โข dailyentryController.php - Accounting entries
- โข propertiesController.php - Property definitions
---
๐๏ธ Database Tables
Primary Tables (Direct Operations)
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **usergroup** | User roles/groups | usergroupid, usergroupname, usergroupdescription, level, conditions | |
| **relusergroupproperties** | Group permissions | relusergrouppropertiesid, usergroupid, propertyid, propertyvalue, theorder | |
| **properties** | Permission definitions | propertyid, propertyname, propertyparent, propertytype |
| Field Category | Purpose | Key Fields | |
|---|---|---|---|
| **Business Permissions** | Core operations | clientnegative, suplliernegative, storenegative, priceupdate | |
| **Financial Control** | Money operations | directDiscount, percentageDiscount, allowEditDelInBills | |
| **Display Settings** | UI customization | showSellAllPrice, showSellHalfPrice, showBuyPrice, hidemenu | |
| **Restaurant Features** | POS operations | autoKitchenPrint, sendKitchen, hall, takeAway, delivery | |
| **Security Settings** | Access control | allowBillDelete, billDeletePassword, editUserPrivlage | |
| **Report Access** | Data visibility | netprofit, showsIndexStatistics, downloadClientPhones |
| Table Name | Purpose | Relationship | |
|---|---|---|---|
| **user** | System users | usergroup.usergroupid โ user.usergroupid | |
| **properties** | Permission catalog | Property-based permission system |
๐ง Key Functions
1. add() - Create New User Group
Location: Line 248
Purpose: Create a new user group with complete permission set
Function Signature:
function add()
Parameters (via $_POST):
- โข
usergroupname- Group display name - โข
usergroupdescription- Group description - โข
startpage- Default landing page - โข
level- Permission level - โข
clientnegative- Allow negative client balances - โข
suplliernegative- Allow negative supplier balances - โข
storenegative- Allow negative stock - โข
priceupdate- Allow price modifications - โข
directDiscount- Direct discount permission - โข
percentageDiscount- Percentage discount permission - โข
allowEditDelInBills- Edit/delete bills permission - โข
showSellAllPrice- Display all prices flag - โข
autoKitchenPrint- Auto print to kitchen - โข
billDeletePassword- Password for bill deletion - โข
reviewBillsAllowedTables- Array of tables for bill review - โข
itr- Number of properties to process
Process Flow:
2. show() - Display All User Groups
Location: Line 441
Purpose: Retrieve and display all user groups with ordering
Returns: Array of user group data ordered by name
3. edit() - Load User Group for Editing
Location: Line 561
Purpose: Load user group data and associated permissions
Parameters:
- โข
id- User group ID from GET
Returns: Array containing:
- โข
[0]- User group data - โข
[1]- Property data with current values - โข
[2]- Property count
4. update() - Update User Group
Location: Line 580
Purpose: Update user group and permissions using dynamic query building
Key Features:
- โข Dynamic SQL query building via
getUpdateQuery() - โข Permission property updates
- โข Cache invalidation for headers
- โข Session updates for current user group
5. copyUserGroup() - Duplicate User Group
Location: Line 696
Purpose: Create a copy of existing user group with all permissions
Parameters:
- โข
usergroupid- Source group ID
Process Flow:
6. executeOperation() - Bulk Operations
Location: Line 449
Purpose: Perform bulk operations on multiple user groups
Operations:
- โข
1- Temporary delete (soft delete) - โข
2- Return delete (restore) - โข
3- Permanent delete
7. tempdelete() - Soft Delete Group
Location: Line 485
Purpose: Temporarily disable user group (conditions = 1)
8. deleteFinaly() - Permanent Delete Group
Location: Line 528
Purpose: Permanently remove user group with validation
Validation: Checks if group has associated users before deletion
9. getUpdateQuery() - Dynamic Query Builder
Location: Line 723
Purpose: Build dynamic UPDATE SQL based on submitted form fields
Features:
- โข Over 70 different permission fields
- โข Conditional field updates
- โข SQL injection protection
- โข Dynamic query construction
---
๐ Business Logic Flow
Permission Management Architecture
Restaurant/POS Permission System
Financial Control Matrix
| Permission | Scope | Impact | |
|---|---|---|---|
| `clientnegative` | Customer debt | Allow negative balances | |
| `suplliernegative` | Supplier debt | Allow negative balances | |
| `storenegative` | Inventory | Allow negative stock | |
| `directDiscount` | Sales | Direct discount entry | |
| `percentageDiscount` | Sales | Percentage-based discounts | |
| `priceupdate` | Products | Modify product prices | |
| `allowEditDelInBills` | Bills | Edit/delete sales bills | |
| `allowBillDelete` | Security | Delete bills (with password) |
โ ๏ธ Common Issues
Session Cache Management
Issue: Header cache needs clearing when permissions change
// โ
IMPLEMENTED: Line 685-686
$fh = fopen('../temp__cashedheader/cashedheader_' . $_SESSION['dbname'] . '_' . $_SESSION['userid'] . '.html', 'w');
fclose($fh);
User Group Dependencies
Issue: Cannot delete groups with associated users
// โ
VALIDATION: Line 541-542
$userValidation = $myUserRecord->queryByUsergroupid($userGroupId);
if (count($userValidation) <= 0) {
// Safe to delete
}
Permission Property Synchronization
Issue: New properties don't appear in old groups
// โ
SOLUTION: Line 342 - Uses queryAllbillsettingsNotDeleted_f()
// Automatically includes new properties with default values
---
๐ Dependencies
Required DAOs
- โข
UsergroupMySqlDAO- User group database operations - โข
UsergroupMySqlExtDAO- Extended user group queries - โข
RelusergrouppropertiesMySqlDAO- Permission relationships - โข
PropertiesMySqlDAO- Permission definitions - โข
UserMySqlDAO- User validation for deletions
Required Files
- โข
../public/impOpreation.php- Core operations - โข
../public/config.php- Configuration - โข
../public/include_dao.php- DAO includes
Permission Categories
1. Basic Access - Menu visibility, page access
2. Financial - Money operations, discounts, pricing
3. Inventory - Stock control, negative quantities
4. Restaurant - Kitchen, halls, service types
5. Security - Bill deletion, user management
6. Reporting - Statistics, exports, data access
7. UI Control - Price visibility, menu hiding
---
๐ Performance Notes
- โข Property-based permissions require JOIN queries
- โข Bulk operations process multiple groups efficiently
- โข Cache management for header regeneration
- โข Session updates for real-time permission changes
- โข Dynamic query building reduces code duplication
The User Group Controller is the foundation of the ERP system's security model, providing fine-grained access control across all business operations.