No description
Find a file
padreug 46e910ba25 Add RBAC (Role-Based Access Control) system - Phase 1
Implemented comprehensive role-based permission management system:

Database:
- Added m004_add_rbac_tables migration
- roles table: Define named permission bundles (Employee, Contractor, etc.)
- role_permissions table: Map roles to account permissions
- user_roles table: Assign users to roles with optional expiration
- Created 4 default roles: Employee (default), Contractor, Accountant, Manager

Models (models.py):
- Role, CreateRole, UpdateRole
- RolePermission, CreateRolePermission
- UserRole, AssignUserRole
- RoleWithPermissions, UserWithRoles

CRUD Operations (crud.py):
- Role management: create_role, get_role, get_all_roles, update_role, delete_role
- get_default_role() - get auto-assigned role for new users
- Role permissions: create_role_permission, get_role_permissions, delete_role_permission
- User role assignment: assign_user_role, get_user_roles, revoke_user_role
- Helper functions:
  - get_user_permissions_from_roles() - resolve user permissions via roles
  - check_user_has_role_permission() - check role-based access
  - auto_assign_default_role() - auto-assign default role to new users

Permission Resolution Order:
1. Individual account_permissions (direct grants/exceptions)
2. Role-based permissions (via user_roles → role_permissions)
3. Inherited permissions (hierarchical account names)
4. Deny by default

Next: API endpoints, UI, and permission resolution logic integration

🤖 Generated with Claude Code
2025-11-11 23:34:28 +01:00
core Removes core balance calculation logic 2025-11-10 01:06:51 +01:00
docs Add UI improvements plan for bulk permission features 2025-11-11 00:05:57 +01:00
helper HELPER FILE TO DELETE/REVISE 2025-11-10 21:44:43 +01:00
static Set default permission type to 'submit_expense' in grant forms 2025-11-11 23:18:40 +01:00
templates/castle Fix loading state hang when user has no permissions 2025-11-11 23:03:05 +01:00
.gitignore initial commit 2025-10-22 12:33:45 +02:00
__init__.py Integrate account sync with API, background tasks, and user creation 2025-11-11 01:28:59 +01:00
account_sync.py Fix virtual parent detection by refreshing account list 2025-11-11 02:53:41 +01:00
account_utils.py Update default expense accounts to optimized structure 2025-11-11 03:09:44 +01:00
beancount_format.py Implement hybrid approach for balance assertions 2025-11-10 20:46:12 +01:00
CLAUDE.md update CLAUDE.md 2025-11-10 19:32:00 +01:00
config.json initial commit 2025-10-22 12:33:45 +02:00
crud.py Add RBAC (Role-Based Access Control) system - Phase 1 2025-11-11 23:34:28 +01:00
description.md initial commit 2025-10-22 12:33:45 +02:00
fava_client.py Optimize recent transactions with 30-day date filter 2025-11-11 22:39:22 +01:00
manifest.json initial commit 2025-10-22 12:33:45 +02:00
MIGRATION_SQUASH_SUMMARY.md Squash 16 migrations into single clean initial migration 2025-11-10 21:51:11 +01:00
migrations.py Add RBAC (Role-Based Access Control) system - Phase 1 2025-11-11 23:34:28 +01:00
migrations_old.py.bak Squash 16 migrations into single clean initial migration 2025-11-10 21:51:11 +01:00
models.py Add RBAC (Role-Based Access Control) system - Phase 1 2025-11-11 23:34:28 +01:00
permission_management.py Add account sync and bulk permission management 2025-11-10 23:55:26 +01:00
README.md initial commit 2025-10-22 12:33:45 +02:00
services.py Fixes user account creation in Fava/Beancount 2025-11-10 21:22:02 +01:00
tasks.py Integrate account sync with API, background tasks, and user creation 2025-11-11 01:28:59 +01:00
views.py Adds admin permissions management page 2025-11-07 18:05:30 +01:00
views_api.py Add user-selectable date range filters for Recent Transactions 2025-11-11 22:54:14 +01:00

Castle Accounting Extension for LNbits

A full-featured double-entry accounting system for collective projects, integrated with LNbits Lightning payments.

Overview

Castle Accounting enables collectives like co-living spaces, makerspaces, and community projects to:

  • Track expenses and revenue with proper accounting
  • Manage individual member balances
  • Record contributions as equity or reimbursable expenses
  • Track accounts receivable (what members owe)
  • Generate Lightning invoices for settlements

Installation

This extension is designed to be installed in the lnbits/extensions/ directory.

cd lnbits/extensions/
# Copy or clone the castle directory here

Enable the extension through the LNbits admin interface or by adding it to your configuration.

Usage

For Members

  1. Add an Expense: Record money you spent on behalf of the collective

    • Choose "Liability" if you want reimbursement
    • Choose "Equity" if it's a contribution
  2. View Your Balance: See if the Castle owes you money or vice versa

  3. Pay Outstanding Balance: Generate a Lightning invoice to settle what you owe

For Admins

  1. Create Accounts Receivable: Record when someone owes the collective money

  2. Record Revenue: Track income received by the collective

  3. View All Transactions: See complete accounting history

  4. Make Payments: Record payments to members

Architecture

Data Models

  • Account: Individual accounts in the chart of accounts
  • JournalEntry: Transaction header with description and date
  • EntryLine: Individual debit/credit lines (always balanced)

Account Types

  • Assets: Things the Castle owns (Cash, Bank, Accounts Receivable)
  • Liabilities: What the Castle owes (Accounts Payable to members)
  • Equity: Member contributions and retained earnings
  • Revenue: Income streams
  • Expenses: Operating costs

Database Schema

The extension creates three tables:

  • castle.accounts - Chart of accounts
  • castle.journal_entries - Transaction headers
  • castle.entry_lines - Debit/credit lines

API Reference

See description.md for full API documentation.

Development

To modify this extension:

  1. Edit models in models.py
  2. Add database migrations in migrations.py
  3. Implement business logic in crud.py
  4. Create API endpoints in views_api.py
  5. Update UI in templates/castle/index.html

Contributing

Contributions welcome! Please ensure:

  • Journal entries always balance
  • User permissions are properly checked
  • Database transactions are atomic

License

MIT License - feel free to use and modify for your collective!