This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Services

Documentation for system services and ecosystem components

Ecosystem

Tài liệu về các dịch vụ trong hệ sinh thái của hệ thống gồm các dịch vụ của nhóm phát triển và các dịch vụ mã nguồn mở.

1 - Identity Management Service

Identity Management Service

Dịch vụ lưu trữ mã hóa và quản lý định đanh người dùng

Tài liệu triển khai dịch vụ IdM

xem tại https://gitlab.com/n13t/idm/-/blob/master/DEVELOPMENT.md

Bảo mật

Mã hóa dữ liệu người dùng

Mô tả cách thức mã hóa dữ liệu người dùng

  • PLAINTEXT - dữ liệu người dùng
  • DATA_KEY - khóa riêng cho mỗi trường dữ liệu
  • USER_KEY - khóa riêng cho mỗi người dùng
  • SERVICE_KEY - khóa của dịch vụ (đặt bởi người triển khai)
  • MASTER_KEY - khóa chung cho tất cả dữ liệu được lưu trữ bởi dịch vụ KMS
  1. encrypt(PLAINTEXT, DATA_KEY) = CPT1 (thực hiện tại server)
  2. encrypt(CPT1, USER_KEY) = CPT2 (thực hiện tại server)
  3. encrypt(CPT2, SERVICE_KEY) = CPT3 (thực hiện tại server)
  4. encrypt(CPT3, MASTER_KEY) = CPT4 (thực hiện tại KMS, MASTER_KEY là bí mật)
  5. Lưu trữ CPT4

Thực hiện ngược lại các bước trên để giải mã dữ liệu

Tài liệu tham khảo

2 - Vault

Vault

Yêu cầu

  • Nhận và mã hóa dữ liệu
  • Quản lý keyring, key, key version
  • Hỗ trợ tính năng key rotation

Giải pháp

Sử dụng Vault của HashiCorp

Tham khảo

3 - Dictionary Service

4 - Collector Service

Collector Service - Dịch vụ thu thập dữ liệu


{ { < svg “content/docs/services/collector/img/overview.svg” > } } TODO: mo ta

Tính năng

  1. Thu thập dữ liệu, dịch vụ hỗ trợ các phương thức thu thập dữ liệu sau
    1. Hỗ trợ API thu thập dữ liệu, phương pháp này hỗ trợ thu thập dữ liệu thông qua internet với bộ API được quy định sẵn.
    2. Hỗ trợ thu thập dữ liệu bằng tin nhắn SMS
  2. Hỗ trợ các tính năng quản lý dự án thu thập dữ liệu:
    1. Quản lý biểu mẫu thu thập dữ liệu
    2. Quản lý người tham gia và người nhập liệu theo nhóm
  3. Hỗ trợ nhắc nhở nhập liệu bằng SMS

Thu thập dữ liệu bằng tin nhắn SMS

Phương pháp này hỗ trợ người dùng nhập dữ liệu từ tin nhắn SMS

  • Yêu cầu

    • Một header nhắn tin phải được quy định trước
    • Số điện thoại của người dùng phải tồn tại trong cơ sơ dữ liệu của hệ thống
  • Cơ chế hoạt động

{{ < svg “content/docs/services/collector/img/sms_parser.svg” > }}

Triển khai

Sơ đồ triển khai

deployment

Collector Service cần có các thành phần sau khi triển để hoạt động đầy đủ chức năng:

  1. PostgreSQL: là thành phần quan trọng nhất, dùng để lưu trữ mọi dữ liệu của dịch vụ
  2. Identity Management Service: dùng để lưu trữ định danh người dùng (hiện chưa hỗ trợ)
  3. SMS Service: dùng để nhắc nhở nhập dữ liệu và nhận dữ liệu từ SMS
  4. Analysis Service: dùng để ??? (TODO: bổ sung)

Mở rộng (scaling)

Application Deployment Model: Stateless scaling

Tăng số lượng node để tăng khả năng chịu tài và độ ổn định của dịch vụ

Access Control Policies

4.1 - Access Control

Best Practices[1]

Scope the Organization Name

A rule of thumb is to prefix resource names with a domain that represents the organization creating the software.

  • KHÔNG DÙNG: <some-id>
  • DÙNG: <organizaion-id>:<some-id>

Scope Actions, Resources and Subjects

It is wise to scope actions, resources, and subjects in order to prevent name collisions:

  • KHÔNG DÙNG: myorg.com:<subject-id>, myorg.com:<resource-id>, myorg.com:<action-id>
  • DÙNG: myorg.com:subjects:<subject-id>, myorg.com:resources:<resource-id>, myorg.com:actions:<action-id>
  • DÙNG: subjects:myorg.com:<subject-id>, resources:myorg.com:<resource-id>, actions:myorg.com:<action-id>

Multi-Tenant Systems

Multi-tenant systems typically have resources which should not be access by other tenants in the system. This can be achieved by adding the tenant id to the URN:

Do: resources:myorg.com:tenants:<tenant-id>:<resource-id> In some environments, it is common to have organizations and projects belonging to those organizations. Here, the following URN semantics can be used:

Do: resources:myorg.com:organizations:<organization-id>:projects:<project-id>:<resource-id>

Hiện thực

Subject

Users

Các thuộc tính dùng để phân quyền của Users

{
    id: string
    role: string // role của service là admin hoặc user
}

Resources

Dịch vụ Collector gồm có các loại resource sau:

  • Project
{
    id: string
}
  • ProjectUserGroup
{
    id: string
    ProjectId: string
}
  • Form
{
    id: string
}
  • Section
{
    id: string
}
  • FormSection (section thuộc một form cụ thể)
{
    id: string
    FormId: string
}

Chính sách truy cập

Gồm có 3 loại chính sách:

  • Chính sách hệ thống (áp dụng trên mức hệ thống - Ưu tiên cao nhất)
  • Chính sách dịch vụ (áp dụng tại dịch vụ - Ưu tiên cao)
  • Chính sách dự án (áp dụng trong dự án, được PROJECT OWNER quy định để phù hợp với nghiệp vụ của mình)

Chính sách hệ thống (#TODO dẫn nguồn)

Chính sách dịch vụ

Là các chính sách áp dụng trong Collector Service:

  1. PROJECT OWNER có toàn quyền trong dự án của mình
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == r.obj.Owner
  1. RESEARCHER có quyền XEM{Thông tin dự án, thành viên trong dự án}
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub.role == reseacher
  1. RESEARCHER có quyền XEM, THÊM dữ liệu
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub.role == reseacher

Tài liệu tham khảo

[1] ORY Access Control Policies

5 - Dis Dictionary Service

6 - SMS Service

SMS Service

SMS Service có chức năng quản lý GSM Modem và cung cấp API hỗ trợ các hệ thống khác trong hệ thống thực hiện các chức năng như gửi, nhận tin nhắn SMS một cách thuận tiện nhất.

Tính năng

  • Giám sát trạng thái các modem bằng dashboard
  • Gửi tin nhắn SMS (gửi từng tin hoặc hàng loạt). Hỗ trợ các dạng tin nhắn 7bit, 16bit; encode UTF-8
  • Nhận tin nhắn và lưu trữ tin nhắn.

Tổng quan

{{ < svg “content/docs/services/sms/img/component.svg” > }}

Để gửi tin nhắn các clients (là một server hay service khác, hoặc ứng dụng bất kỳ có kết nối đến SMS Service) gọi phương thức SendSms() đến SMS Service. Phần còn lại SMSS sẽ tự động thực hiện gọi SMS Gateway thông qua HTTP request để yêu cầu GSM Modem thực hiện lệnh AT gửi tin nhắn. SMS Service sẽ trả kết quả cho client khi hoàn thành việc gửi tin nhắn. Kết thúc gửi tin nhắn.

Phiên bản trước (legacy)

6.1 - SMS Service (Legacy)

SMS Service (Legacy)

Đây là phiên bản đầu tiên của SMS Service nhằm hỗ trợ chức năng gửi và nhận tin nhắn. Phiên bản viết hoàn toàn bằng Node.js và dùng thư viện node-serialport để giao tiếp với GSM modem. Các luồng quản lý logic và sử lý hàng đợi tin nhắn được hiện thực dựa trên ý tưởng từ thư viện modem

{{ < svg “content/docs/services/sms/img/legacy.svg” > }}