Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/docs/MISSING_PERMISSIONS_ANALYSIS.md
2026-04-14 19:34:55 +03:30

312 lines
12 KiB
Markdown
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# تحلیل بخش‌ها و Endpointهای بدون دسترسی
این فایل شامل لیست بخش‌ها و endpointهای سطح کسب و کار است که:
1. **دسترسی تعریف نشده دارند** (permission check ندارند یا از dependency مناسب استفاده نمی‌کنند)
2. **در بخش مدیریت دسترسی‌ها تعریف نشده‌اند** (بخش‌ها در سیستم permissions تعریف نشده‌اند)
---
## بخش‌های موجود در سیستم Permissions
بر اساس `business_dashboard.py` و `README.md`:
### ✅ بخش‌های تعریف شده:
- `people`: add, view, edit, delete
- `people_receipts`: add, view, edit, delete, draft
- `people_payments`: add, view, edit, delete, draft
- `people_transactions`: add, view, edit, delete, draft
- `products`: add, view, edit, delete
- `price_lists`: add, view, edit, delete
- `categories`: add, view, edit, delete
- `product_attributes`: add, view, edit, delete
- `bank_accounts`: add, view, edit, delete
- `cash`: add, view, edit, delete
- `petty_cash`: add, view, edit, delete
- `checks`: add, view, edit, delete, collect, transfer, return
- `wallet`: view, charge
- `transfers`: add, view, edit, delete, draft
- `invoices`: add, view, edit, delete, draft
- `expenses_income`: add, view, edit, delete, draft
- `accounting_documents`: add, view, edit, delete, draft
- `chart_of_accounts`: add, view, edit, delete
- `opening_balance`: view, edit
- `warehouses`: add, view, edit, delete
- `warehouse_transfers`: add, view, edit, delete, draft
- `settings`: business, print, history, users
- `storage`: view, delete
- `sms`: history, templates
- `marketplace`: view, buy, invoices
---
## ❌ بخش‌ها و Endpointهای بدون دسترسی یا Section نامناسب
### 1. **Accounts (حساب‌ها) - `chart_of_accounts`**
**فایل:** `adapters/api/v1/accounts.py`
**مشکل:**
- ✅ Section `chart_of_accounts` در permissions تعریف شده است
- ❌ اما endpointها **permission check ندارند** - فقط `require_business_access` دارند
**Endpointهای نیازمند تغییر:**
- `GET /accounts/business/{business_id}/tree` → نیاز به `chart_of_accounts.view`
- `GET /accounts/business/{business_id}` → نیاز به `chart_of_accounts.view`
- `GET /accounts/business/{business_id}/account/{account_id}` → نیاز به `chart_of_accounts.view`
- `POST /accounts/business/{business_id}` → نیاز به `chart_of_accounts.view` (search)
- `POST /accounts/business/{business_id}` → نیاز به `chart_of_accounts.add` (create)
- `PUT /accounts/business/{business_id}/account/{account_id}` → نیاز به `chart_of_accounts.edit`
- `DELETE /accounts/business/{business_id}/account/{account_id}` → نیاز به `chart_of_accounts.delete`
---
### 2. **Fiscal Years (سال‌های مالی)**
**فایل:** `adapters/api/v1/fiscal_years.py`
**مشکل:**
- ❌ **Section تعریف نشده** در permissions
- ❌ endpointها **permission check ندارند** - فقط `require_business_access` دارند
**Endpointهای نیازمند تغییر:**
- `GET /business/{business_id}/fiscal-years` → نیاز به section جدید مثل `fiscal_years.view`
- `GET /business/{business_id}/fiscal-years/current` → نیاز به section جدید مثل `fiscal_years.view`
**راه‌حل پیشنهادی:**
- اضافه کردن section `fiscal_years` به permissions با actions: `view`, `add`, `edit`, `delete`
---
### 3. **Kardex (کاردکس)**
**فایل:** `adapters/api/v1/kardex.py`
**مشکل:**
- ❌ **Section تعریف نشده** در permissions (یا باید `reports` باشد)
- ❌ endpointها **permission check ندارند** - فقط `require_business_access` دارند
**Endpointهای نیازمند تغییر:**
- `POST /kardex/businesses/{business_id}/lines` → نیاز به `reports.view` یا section جدید
**راه‌حل پیشنهادی:**
- استفاده از section `reports` با action `view` یا اضافه کردن section `kardex` با action `view`
---
### 4. **Report Templates (قالب‌های گزارش)**
**فایل:** `adapters/api/v1/report_templates.py`
**مشکل:**
- ❌ **Section `report_templates` در permissions تعریف نشده**
- ✅ اما endpointها permission check دارند (از `report_templates.write` استفاده می‌کنند)
**Endpointهای نیازمند تغییر:**
- تمام endpointها از section `report_templates` استفاده می‌کنند که باید به permissions اضافه شود
**راه‌حل پیشنهادی:**
- اضافه کردن section `report_templates` به permissions با actions: `view`, `write`, `delete`
---
### 5. **Business Dashboard (داشبورد کسب و کار)**
**فایل:** `adapters/api/v1/business_dashboard.py`
**مشکل:**
- ❌ **Section مناسب تعریف نشده**
- ❌ endpointها **permission check ندارند** - فقط `require_business_access` دارند
**Endpointهای نیازمند تغییر:**
- `POST /business/{business_id}/dashboard` → احتمالاً نیاز به `reports.view` یا section عمومی
- `POST /business/{business_id}/info-with-permissions` → نیاز به دسترسی عمومی (همه اعضا می‌توانند ببینند)
- endpointهای مربوط به widgets → نیاز به `settings.view` یا `reports.view`
**راه‌حل پیشنهادی:**
- استفاده از section `settings.view` برای داشبورد یا اضافه کردن section `dashboard` با action `view`
---
### 6. **Business Users (کاربران کسب و کار)**
**فایل:** `adapters/api/v1/business_users.py`
**مشکل:**
- ✅ Section `settings.manage_users` در permissions تعریف شده است
- ❌ اما endpointها **permission check ندارند** - فقط `require_business_access` دارند
**Endpointهای نیازمند تغییر:**
- `GET /business/{business_id}/users/{user_id}` → نیاز به `settings.manage_users`
- `GET /business/{business_id}/users` → نیاز به `settings.manage_users`
- `POST /business/{business_id}/users/add` → نیاز به `settings.manage_users`
- `POST /business/{business_id}/users/{user_id}/permissions` → نیاز به `settings.manage_users`
- `DELETE /business/{business_id}/users/{user_id}` → نیاز به `settings.manage_users`
---
### 7. **Products (محصولات)**
**فایل:** `adapters/api/v1/products.py`
**مشکل:**
- ✅ Section `products` در permissions تعریف شده است
- ⚠️ اما از section `inventory` استفاده می‌کند (نامناسب)
**Endpointهای نیازمند تغییر:**
- تمام endpointها باید از section `products` به جای `inventory` استفاده کنند
**Endpointهای نیازمند بررسی:**
- `POST /products/business/{business_id}` → از `inventory.write` استفاده می‌کند (باید `products.add` باشد)
- سایر endpointها نیاز به بررسی دارند
---
### 8. **Warehouses (انبارها)**
**فایل:** `adapters/api/v1/warehouses.py`
**مشکل:**
- ✅ Section `warehouses` در permissions تعریف شده است
- ⚠️ اما از section `inventory` استفاده می‌کند (نامناسب)
**Endpointهای نیازمند تغییر:**
- تمام endpointها باید از section `warehouses` به جای `inventory` استفاده کنند
---
### 9. **Warehouse Documents (اسناد انبار)**
**فایل:** `adapters/api/v1/warehouse_docs.py`
**مشکل:**
- ✅ Section `warehouse_transfers` در permissions تعریف شده است
- ❌ اما endpointها **permission check ندارند** - فقط `require_business_access` دارند
**Endpointهای نیازمند بررسی:**
- باید permission check با section مناسب اضافه شود (`warehouse_transfers`)
---
### 10. **Price Lists (لیست قیمت‌ها)**
**فایل:** `adapters/api/v1/price_lists.py`
**مشکل:**
- ✅ Section `price_lists` در permissions تعریف شده است
- ⚠️ اما از section `inventory` استفاده می‌کند (نامناسب)
**Endpointهای نیازمند تغییر:**
- تمام endpointها باید از section `price_lists` به جای `inventory` استفاده کنند
---
### 11. **Categories (دسته‌بندی‌ها)**
**فایل:** `adapters/api/v1/categories.py`
**مشکل:**
- ✅ Section `categories` در permissions تعریف شده است
- ✅ endpointها permission check دارند
**وضعیت:** ✅ **درست است**
---
### 12. **Product Attributes (ویژگی‌های محصول)**
**فایل:** `adapters/api/v1/product_attributes.py`
**مشکل:**
- ✅ Section `product_attributes` در permissions تعریف شده است
- ✅ endpointها permission check دارند
**وضعیت:** ✅ **درست است**
---
### 13. **BOMs (Bill of Materials)**
**فایل:** `adapters/api/v1/boms.py`
**مشکل:**
- ✅ Section `products` یا `inventory` در permissions تعریف شده است
- ⚠️ اما از section `inventory` استفاده می‌کند
**Endpointهای نیازمند بررسی:**
- احتمالاً باید section جداگانه `boms` داشته باشد یا از `products` استفاده کند
---
## خلاصه مشکلات
### بخش‌های بدون تعریف در Permissions:
1. ❌ **`fiscal_years`** - سال‌های مالی
2. ❌ **`report_templates`** - قالب‌های گزارش
3. ❌ **`kardex`** - کاردکس (یا باید از `reports` استفاده کند)
4. ❌ **`dashboard`** - داشبورد (یا باید از `reports` یا `settings` استفاده کند)
### Endpointهای بدون Permission Check:
1. ❌ **`accounts.py`** - تمام endpointها
2. ❌ **`fiscal_years.py`** - تمام endpointها
3. ❌ **`kardex.py`** - تمام endpointها
4. ❌ **`business_dashboard.py`** - تمام endpointها
5. ❌ **`business_users.py`** - تمام endpointها
6. ❌ **`warehouse_docs.py`** - تمام endpointها
### Endpointهای با Section نامناسب:
1. ⚠️ **`products.py`** - از `inventory` استفاده می‌کند (باید `products` باشد)
2. ⚠️ **`warehouses.py`** - از `inventory` استفاده می‌کند (باید `warehouses` باشد)
3. ⚠️ **`price_lists.py`** - از `inventory` استفاده می‌کند (باید `price_lists` باشد)
4. ⚠️ **`boms.py`** - از `inventory` استفاده می‌کند (باید `products` یا `boms` باشد)
---
## راه‌حل پیشنهادی
### 1. اضافه کردن بخش‌های جدید به Permissions:
```json
{
"fiscal_years": {
"view": true,
"add": true,
"edit": true,
"delete": true
},
"report_templates": {
"view": true,
"write": true,
"delete": true
},
"reports": {
"view": true,
"export": true
}
}
```
### 2. اضافه کردن Permission Check به Endpointها:
- استفاده از `require_business_permission_dep` برای endpointهایی که `business_id` دارند
- استفاده از `require_business_permission_by_entity_dep` برای endpointهایی که entity ID دارند
### 3. اصلاح Section‌های نامناسب:
- تغییر از `inventory` به section مناسب (`products`, `warehouses`, `price_lists`)
---
## اولویت‌بندی
### اولویت بالا (امنیت):
1. ✅ **`accounts.py`** - دسترسی به حساب‌ها مهم است
2. ✅ **`business_users.py`** - مدیریت کاربران بسیار مهم است
3. ✅ **`fiscal_years.py`** - سال‌های مالی مهم هستند
### اولویت متوسط:
4. ⚠️ **`warehouse_docs.py`** - اسناد انبار
5. ⚠️ **`kardex.py`** - کاردکس
6. ⚠️ **`business_dashboard.py`** - داشبورد
### اولویت پایین (اصلاح Section):
7. 🔧 **`products.py`** - تغییر section از `inventory` به `products`
8. 🔧 **`warehouses.py`** - تغییر section از `inventory` به `warehouses`
9. 🔧 **`price_lists.py`** - تغییر section از `inventory` به `price_lists`