Giải phápKhách hàng
Tài liệu

Object Security Rules

CX

CX

Object Security Rules

5/8/2026

blog.summarize

blog.share_blog

Object Security Rules API

API dùng để xem danh sách, xem chi tiết, tạo, cập nhật và xoá quy tắc bảo mật của một Object.

Mỗi quy tắc bảo mật xác định:

  • Quy tắc áp dụng cho những bản ghi nào.
  • Quy tắc áp dụng cho những người dùng nào.
  • Những người dùng đó được tạo bản ghi hoặc xem, sửa, xoá các bản ghi phù hợp hay không.

Xác thực

Tất cả request yêu cầu các header:

Authorization: Bearer {tokenId}-{secretToken}
Content-Type: application/json

Workspace được xác định từ access token. Không gửi workspace ID trong body hoặc một header riêng.


Tổng quan endpoint

Chức năng Method Endpoint
Xem danh sách quy tắc POST /bapi/v1/object-security-rules/list
Xem chi tiết quy tắc POST /bapi/v1/object-security-rules/view
Tạo quy tắc POST /bapi/v1/object-security-rules
Tạo quy tắc (alias) POST /bapi/v1/object-security-rules/create
Cập nhật một quy tắc PUT /bapi/v1/object-security-rules/{ruleId}
Xoá quy tắc POST /bapi/v1/object-security-rules/delete

Mặc dù endpoint danh sách và chi tiết dùng POST, đây là các thao tác chỉ đọc.

Quy ước HTTP status:

Trường hợp HTTP status
Tạo thành công (r = 0) 201
Danh sách, chi tiết, cập nhật hoặc xoá thành công (r = 0) 200
API trả lỗi nghiệp vụ (r != 0) 400
Body không phải JSON hợp lệ 400
Token không hợp lệ hoặc hết hạn 401
Vượt rate limit 429
Lỗi máy chủ 500

r = 0 mới là điều kiện thành công ở cấp nghiệp vụ. Khi xử lý lỗi, nên ghi log HTTP status, rmsg.


Quy ước dữ liệu

Loại quy tắc

Trường type xác định mục đích của quy tắc và các quyền mà quy tắc chấp nhận.

type Mục đích Điều kiện bản ghi Loại đối tượng áp dụng Nhóm quyền bắt buộc
1 Quy định ai được tạo bản ghi và được nhập những field nào Không sử dụng 1 đến 5 create
2 Quy định ai được xem, sửa hoặc xoá các bản ghi phù hợp Bắt buộc 1 đến 10 read, edit, delete

Không thể đổi loại quy tắc sau khi tạo. Nếu cần cả quyền tạo và quyền trên bản ghi đã tồn tại, hãy tạo hai quy tắc riêng.

Trạng thái và cờ tiêu chuẩn

  • status: 1 = active, 0 = inactive.
  • isStandard: 1 = quy tắc tiêu chuẩn, 0 = quy tắc tuỳ chỉnh.
  • API này chỉ cho phép tạo quy tắc tuỳ chỉnh. Khi tạo, gửi isStandard: 0.

Quy tắc inactive vẫn được lưu nhưng không hoạt động. Dùng API cập nhật để kích hoạt hoặc vô hiệu hoá; thao tác xoá sẽ xoá vĩnh viễn quy tắc.

Cấu trúc request dạng danh sách

Request tạo và xoá dùng mảng data ở top-level:

{
  "data": [
    { "...": "..." }
  ]
}

Request tạo và xoá có thể chứa nhiều phần tử. Nếu bất kỳ phần tử nào lỗi, API sẽ trả lỗi cho request. Nên kiểm tra trạng thái hiện tại trước khi thử lại một batch bị lỗi.

Endpoint cập nhật public chỉ đại diện cho một quy tắc. Mảng data của request cập nhật phải chứa đúng một object.


Các trường của quy tắc

Trường Kiểu Mô tả
id String ID quy tắc được sinh tự động
objectTypeId String ID Object được quy tắc bảo vệ
name String Tên quy tắc, duy nhất trong Object; tối đa 100 ký tự
description String/null Mô tả không bắt buộc; tối đa 500 ký tự
status Integer 1 active, 0 inactive
type Integer Mục đích: 1 quyền tạo, 2 quyền xem/sửa/xoá
isStandard Integer 1 tiêu chuẩn, 0 tuỳ chỉnh
filter Object/null Điều kiện chọn bản ghi cho quy tắc type=2
personnelFilters Array Điều kiện xác định những người dùng được áp dụng quy tắc
scopes Array Quyền thao tác và phạm vi field được cấp
created Long Thời điểm tạo, Unix milliseconds
updated Long Thời điểm cập nhật gần nhất, Unix milliseconds
createdBy Object/null Thông tin rút gọn của người tạo, thường có id, fullName và avatar
updatedBy Object/null Thông tin rút gọn của người cập nhật gần nhất

Response dạng rút gọn thường trả filter: null, personnelFiltersscopes là mảng rỗng. Dùng endpoint chi tiết hoặc gửi withDetails: true khi xem danh sách nếu cần các thông tin này.


Cấu trúc điều kiện bản ghi

Object filter chỉ áp dụng cho quy tắc type=2. Bản ghi phải thoả mãn điều kiện này trước khi quy tắc có thể cấp quyền xem, sửa hoặc xoá.

{
  "logicType": "AND",
  "logic": "",
  "conditions": [
    {
      "field": "gross_profit_amount",
      "op": ">",
      "params": 10
    }
  ]
}
Trường Kiểu Bắt buộc Mô tả
logicType String Cách kết hợp điều kiện, thường là AND hoặc OR
logic String Không Biểu thức đánh số cho logic nâng cao, ví dụ 1 AND (2 OR 3); dùng "" khi logicType đã đủ
conditions Array Danh sách điều kiện bản ghi. Dùng [] khi không giới hạn theo field cụ thể
conditions[].field String Slug của field, không phải field ID
conditions[].op String Toán tử so sánh được loại field hỗ trợ
conditions[].params Bất kỳ Tuỳ toán tử Giá trị so sánh; có thể là một giá trị, mảng hoặc null

Các toán tử thường dùng gồm =, !=, >, >=, <, <=, in, not in, is nullnot null. Toán tử hợp lệ và cấu trúc params phụ thuộc loại field.

Với quy tắc type=1, bỏ filter; quyền tạo được xác định bởi personnelFilters và scope create.


Đối tượng áp dụng (personnelFilters)

Mỗi phần tử chọn một nhóm người dùng. Nhiều phần tử sẽ hợp nhất các nhóm người dùng được chọn.

Toán tử nhóm

op Ý nghĩa
all Tất cả người dùng trong nhóm; bỏ ID phần tử của nhóm ở các trường hợp được ghi chú
include Chỉ người dùng, vai trò, vị trí, phòng ban hoặc người dùng suy ra từ field được chọn
exclude Tất cả trong nhóm ngoại trừ các phần tử được chọn

Các phần tử cùng một loại điều kiện phải dùng cùng op. Riêng điều kiện phòng ban (type 23) có thể dùng op khác nhau theo từng phòng ban.

Các loại điều kiện

type Chọn người dùng theo Trường bắt buộc op hỗ trợ Loại quy tắc
1 Người dùng cụ thể personnelId, trừ khi op=all all, include, exclude 1, 2
2 Vị trí trong một phòng ban departmentId; thêm positionId khi op=include all, include 1, 2
3 Vị trí trong một phòng ban và các phòng ban cấp dưới departmentId; thêm positionId khi op=include all, include 1, 2
4 Vai trò roleId, trừ khi op=all all, include, exclude 1, 2
5 Vị trí trong toàn bộ tổ chức positionId, trừ khi op=all all, include, exclude 1, 2
6 Người dùng được tham chiếu bởi một field tra cứu Nhân sự trên bản ghi fieldId include 2
7 Người dùng cùng phòng ban với nhân sự được tham chiếu, đồng thời giữ vị trí được chọn fieldId, positionId include 2
8 Người dùng thuộc phòng ban cha của nhân sự được tham chiếu, đồng thời giữ vị trí được chọn fieldId, positionId include 2
9 Người dùng thuộc phòng ban được tham chiếu bởi field tra cứu Phòng ban, đồng thời giữ vị trí được chọn fieldId, positionId include 2
10 Người dùng thuộc phòng ban cha của phòng ban được tham chiếu, đồng thời giữ vị trí được chọn fieldId, positionId include 2

Với type 6 đến 10, fieldId là ID của field. Field phải thuộc Object được bảo vệ và phải tra cứu đúng Object Nhân sự hoặc Phòng ban theo yêu cầu.

Ví dụ:

[
  {
    "type": 1,
    "op": "all"
  },
  {
    "type": 3,
    "op": "include",
    "departmentId": "DEPKG4QQZEKMRN",
    "positionId": "POSKG4QQHEKMN9"
  },
  {
    "type": 4,
    "op": "include",
    "roleId": "RO87GAQEIKN10"
  }
]

Nên gửi ít nhất một điều kiện có ý nghĩa. Với include hoặc exclude, gửi một phần tử trong mảng cho mỗi ID được chọn.


Phạm vi quyền (scopes)

Tên quyền

scope Ý nghĩa op hỗ trợ
create Các field người dùng được nhập khi tạo bản ghi all, include, exclude
read Các field người dùng được xem trên bản ghi phù hợp all, include, exclude, none
edit Các field người dùng được sửa trên bản ghi phù hợp all, include, exclude, none
delete Người dùng có được xoá bản ghi phù hợp hay không yes, no

Với include hoặc exclude, thêm một phần tử cho mỗi field và dùng fieldId:

[
  {
    "scope": "edit",
    "op": "include",
    "fieldId": "OF87GAQEIKN10"
  },
  {
    "scope": "edit",
    "op": "include",
    "fieldId": "OF87GAQEIKN11"
  }
]

Tất cả phần tử của cùng một scope phải dùng cùng op.

  • Với all, none, yes hoặc no, không gửi fieldId.
  • Quy tắc type=1 chỉ được chứa scope create.
  • Quy tắc type=2 phải chứa đủ read, editdelete. Dùng none hoặc no khi không cấp một quyền.
  • Với type=2, phải còn ít nhất một field được xem hoặc được sửa.
  • Không nên đưa field tính toán vào scope create hoặc edit.

1. Xem danh sách quy tắc

Endpoint: POST /bapi/v1/object-security-rules/list

Request Body

{
  "objectTypeId": "OT87GAQEIKN10",
  "status": "1",
  "order": "updated",
  "sort": "desc"
}

Tham số danh sách

Trường Kiểu Bắt buộc Mô tả
id String Không ID quy tắc chính xác hoặc nhiều ID phân cách bằng dấu phẩy
objectTypeId String Không* Object ID hoặc nhiều Object ID phân cách bằng dấu phẩy
objectSlug String Không* Object slug hoặc nhiều slug phân cách bằng dấu phẩy; được chuyển thành Object ID
name String Không Tìm một phần tên; nhiều giá trị phân cách bằng dấu phẩy được hiểu là các lựa chọn thay thế
description String Không Tìm một phần mô tả; nhiều giá trị phân cách bằng dấu phẩy được hiểu là các lựa chọn thay thế
status Integer/String Không 0 inactive hoặc 1 active; hỗ trợ nhiều giá trị phân cách bằng dấu phẩy
isStandard Integer/String Không 0 tuỳ chỉnh hoặc 1 tiêu chuẩn; hỗ trợ nhiều giá trị phân cách bằng dấu phẩy
createdBy String Không ID người tạo hoặc nhiều ID phân cách bằng dấu phẩy
updatedBy String Không ID người cập nhật gần nhất hoặc nhiều ID phân cách bằng dấu phẩy
created String Không Khoảng thời gian milliseconds: start,end, start, hoặc ,end
updated String Không Khoảng thời gian cập nhật milliseconds: start,end, start, hoặc ,end
filterFieldsNotIn String Không Tên các field có điều kiện khớp chính xác cần đảo ngược, phân cách bằng dấu phẩy; ví dụ createdBy,status
withDetails Boolean Không true trả thêm filter, personnelFiltersscopes; mặc định false
order String Không Field sắp xếp như updated, created, name, status, isStandard hoặc type; mặc định created
sort String Không Chiều sắp xếp asc hoặc desc; mặc định desc

*Với request danh sách thông thường, nên gửi objectTypeId hoặc objectSlug để chỉ lấy quy tắc của Object mong muốn.

Endpoint hiện trả toàn bộ quy tắc phù hợp và chưa phân trang.

Ví dụ cURL

curl --location 'https://{workspace-domain}/bapi/v1/object-security-rules/list' \
  --header 'Authorization: Bearer {tokenId}-{secretToken}' \
  --header 'Content-Type: application/json' \
  --data '{
    "objectTypeId": "OT87GAQEIKN10",
    "status": "1",
    "order": "updated",
    "sort": "desc"
  }'

Response thành công (200)

{
  "r": 0,
  "msg": "Success",
  "data": [
    {
      "id": "OSKDELQESKMSD",
      "objectTypeId": "OT87GAQEIKN10",
      "name": "Quyền truy cập đơn hàng giá trị cao",
      "description": "Cho phép người dùng được chọn xử lý đơn hàng giá trị cao",
      "status": 1,
      "type": 2,
      "isStandard": 0,
      "filter": null,
      "personnelFilters": [],
      "scopes": [],
      "created": 1785916800000,
      "updated": 1786003200000,
      "createdBy": {
        "id": "PE87GAQEIKN10",
        "fullName": "Nguyễn Văn An"
      },
      "updatedBy": {
        "id": "PE87GAQEIKN10",
        "fullName": "Nguyễn Văn An"
      }
    }
  ]
}

2. Xem chi tiết quy tắc

Endpoint: POST /bapi/v1/object-security-rules/view

Request Body

{
  "id": "OSKDELQESKMSD"
}
Trường Kiểu Bắt buộc Mô tả
id String ID quy tắc

Endpoint luôn yêu cầu dữ liệu chi tiết đầy đủ của quy tắc.

Ví dụ cURL

curl --location 'https://{workspace-domain}/bapi/v1/object-security-rules/view' \
  --header 'Authorization: Bearer {tokenId}-{secretToken}' \
  --header 'Content-Type: application/json' \
  --data '{
    "id": "OSKDELQESKMSD"
  }'

Response thành công (200)

Response dùng dạng mảng. Đọc quy tắc cần tìm tại data[0].

{
  "r": 0,
  "msg": "Success",
  "data": [
    {
      "id": "OSKDELQESKMSD",
      "objectTypeId": "OT87GAQEIKN10",
      "name": "Quyền truy cập đơn hàng giá trị cao",
      "description": "Cho phép người dùng được chọn xử lý đơn hàng giá trị cao",
      "status": 1,
      "type": 2,
      "isStandard": 0,
      "filter": {
        "id": "FIvJ0SPEQaoAk",
        "logicType": "AND",
        "logic": "",
        "conditions": [
          {
            "field": "gross_profit_amount",
            "op": ">",
            "params": 10
          }
        ],
        "objectTypeId": "OT87GAQEIKN10",
        "objectTypeSlug": "order"
      },
      "personnelFilters": [
        {
          "id": "PFLQESKMSD001",
          "type": 1,
          "op": "all"
        }
      ],
      "scopes": [
        {
          "id": "OSSLQESKMSD01",
          "scope": "read",
          "op": "all"
        },
        {
          "id": "OSSLQESKMSD02",
          "scope": "edit",
          "op": "include",
          "fieldId": "OF87GAQEIKN10"
        },
        {
          "id": "OSSLQESKMSD03",
          "scope": "delete",
          "op": "no"
        }
      ],
      "created": 1785916800000,
      "updated": 1786003200000
    }
  ]
}

Nếu không tìm thấy ID, request vẫn thành công với data: [].


3. Tạo quy tắc

Endpoint: POST /bapi/v1/object-security-rules

Alias tương đương: POST /bapi/v1/object-security-rules/create.

Các trường khi tạo

Trường Kiểu Bắt buộc Mô tả
objectTypeId String ID Object được quy tắc bảo vệ
name String Tên quy tắc duy nhất trong Object; tối đa 100 ký tự
description String/null Không Mô tả; tối đa 500 ký tự
status Integer 1 active hoặc 0 inactive
type Integer 1 quyền tạo hoặc 2 quyền xem/sửa/xoá
isStandard Integer Phải là 0 với quy tắc tuỳ chỉnh được tạo qua API này
filter Object Với type=2 Điều kiện chọn các bản ghi được quy tắc bảo vệ
personnelFilters Array Người dùng được áp dụng quy tắc
scopes Array Các quyền được quy tắc cấp

Mỗi Object có tối đa 50 quy tắc bảo mật. Tên quy tắc phải duy nhất trong Object đó.

Tạo quy tắc xem/sửa/xoá

curl --location 'https://{workspace-domain}/bapi/v1/object-security-rules' \
  --header 'Authorization: Bearer {tokenId}-{secretToken}' \
  --header 'Content-Type: application/json' \
  --data '{
    "data": [
      {
        "objectTypeId": "OT87GAQEIKN10",
        "isStandard": 0,
        "name": "Quyền truy cập đơn hàng giá trị cao",
        "description": "Cho phép người dùng được chọn xử lý đơn hàng giá trị cao",
        "filter": {
          "logicType": "AND",
          "logic": "",
          "conditions": [
            {
              "field": "gross_profit_amount",
              "op": ">",
              "params": 10
            }
          ]
        },
        "status": 1,
        "scopes": [
          {
            "scope": "read",
            "op": "all"
          },
          {
            "scope": "edit",
            "op": "include",
            "fieldId": "OF87GAQEIKN10"
          },
          {
            "scope": "delete",
            "op": "no"
          }
        ],
        "personnelFilters": [
          {
            "op": "all",
            "type": 1
          }
        ],
        "type": 2
      }
    ]
  }'

Tạo quy tắc cho phép tạo bản ghi

curl --location 'https://{workspace-domain}/bapi/v1/object-security-rules' \
  --header 'Authorization: Bearer {tokenId}-{secretToken}' \
  --header 'Content-Type: application/json' \
  --data '{
    "data": [
      {
        "objectTypeId": "OT87GAQEIKN10",
        "isStandard": 0,
        "name": "Tạo đơn hàng trong phòng Kinh doanh",
        "description": "Quản lý Kinh doanh được tạo đơn hàng",
        "status": 1,
        "scopes": [
          {
            "scope": "create",
            "op": "all"
          }
        ],
        "personnelFilters": [
          {
            "departmentId": "DEPKG4QQZEKMRN",
            "positionId": "POSKG4QQHEKMN9",
            "op": "include",
            "type": 3
          }
        ],
        "type": 1
      }
    ]
  }'

Response thành công (201)

data chứa một ID được sinh cho mỗi quy tắc đã tạo, theo đúng thứ tự request.

{
  "r": 0,
  "msg": "OK",
  "data": [
    {
      "id": "OSKDELQESKMSD"
    }
  ]
}

4. Cập nhật quy tắc

Endpoint: PUT /bapi/v1/object-security-rules/{ruleId}

ruleId trên URL là nguồn tin cậy. API đặt data[0].id theo URL ngay cả khi body chứa một ID khác.

Mảng data phải chứa đúng một object.

Cách cập nhật dữ liệu

  • name, descriptionstatus hỗ trợ partial update. Field không gửi sẽ giữ nguyên giá trị hiện tại.
  • Endpoint không thay đổi objectTypeId, typeisStandard; không gửi các field này trong request cập nhật.
  • Nếu bỏ filter, điều kiện bản ghi hiện tại được giữ nguyên. Nếu gửi, hãy gửi cấu hình filter đầy đủ mong muốn.
  • Nếu bỏ personnelFilters, các điều kiện người dùng hiện tại được giữ nguyên. Nếu gửi, mảng trở thành toàn bộ tập điều kiện mong muốn; phần tử cũ không có trong mảng sẽ bị xoá.
  • Nếu bỏ scopes, các quyền hiện tại được giữ nguyên. Nếu gửi, mảng trở thành toàn bộ tập quyền mong muốn; phần tử cũ không có trong mảng sẽ bị xoá.
  • Gửi personnelFilters: [] hoặc scopes: [] sẽ xoá các phần tử hiện tại và có thể làm quy tắc không còn hiệu lực. Nên gửi một cấu hình đầy đủ, hợp lệ.

Cập nhật riêng trạng thái

curl --location --request PUT \
  'https://{workspace-domain}/bapi/v1/object-security-rules/OSKDELQESKMSD' \
  --header 'Authorization: Bearer {tokenId}-{secretToken}' \
  --header 'Content-Type: application/json' \
  --data '{
    "data": [
      {
        "status": 0
      }
    ]
  }'

Cập nhật đầy đủ các phần có thể chỉnh sửa

curl --location --request PUT \
  'https://{workspace-domain}/bapi/v1/object-security-rules/OSKDELQESKMSD' \
  --header 'Authorization: Bearer {tokenId}-{secretToken}' \
  --header 'Content-Type: application/json' \
  --data '{
    "data": [
      {
        "name": "Quyền truy cập đơn hàng giá trị cao - cập nhật",
        "description": "Chỉ quản lý Kinh doanh được sửa các field đã chọn",
        "filter": {
          "logicType": "AND",
          "logic": "",
          "conditions": [
            {
              "field": "gross_profit_amount",
              "op": ">",
              "params": 20
            }
          ]
        },
        "status": 1,
        "scopes": [
          {
            "scope": "read",
            "op": "all"
          },
          {
            "scope": "edit",
            "op": "include",
            "fieldId": "OF87GAQEIKN10"
          },
          {
            "scope": "delete",
            "op": "no"
          }
        ],
        "personnelFilters": [
          {
            "roleId": "RO87GAQEIKN10",
            "op": "include",
            "type": 4
          }
        ]
      }
    ]
  }'

Response thành công (200)

{
  "r": 0,
  "msg": "OK"
}

Gọi endpoint chi tiết sau khi cập nhật nếu client cần trạng thái đầy đủ đã được lưu.


5. Xoá quy tắc

Endpoint: POST /bapi/v1/object-security-rules/delete

Thao tác xoá là vĩnh viễn. Nếu chỉ muốn tạm dừng quy tắc, hãy cập nhật status thành 0.

Request Body

{
  "data": [
    {
      "id": "OSI2YLQ6GQ7KQ"
    },
    {
      "id": "OSI2YLQ67Q7JL"
    }
  ]
}
Trường Kiểu Bắt buộc Mô tả
data Array Danh sách quy tắc cần xoá
data[].id String ID quy tắc

Ví dụ cURL

curl --location 'https://{workspace-domain}/bapi/v1/object-security-rules/delete' \
  --header 'Authorization: Bearer {tokenId}-{secretToken}' \
  --header 'Content-Type: application/json' \
  --data '{
    "data": [
      {
        "id": "OSI2YLQ6GQ7KQ"
      },
      {
        "id": "OSI2YLQ67Q7JL"
      }
    ]
  }'

Response thành công (200)

{
  "r": 0,
  "msg": "OK"
}

Response lỗi thường gặp

r Mô tả
400 Thiếu hoặc sai objectTypeId
402 Thiếu hoặc sai ID field tra cứu trong điều kiện người dùng
405 Thiếu hoặc sai ID quy tắc
406 Thiếu hoặc sai điều kiện bản ghi
407 Tên quy tắc không hợp lệ hoặc trùng trong Object
408 Cấu hình đối tượng áp dụng không hợp lệ
409 Cấu hình scope không hợp lệ hoặc không đầy đủ
410 Toán tử scope không hợp lệ
411 Toán tử của điều kiện người dùng không hợp lệ
412 Tổ hợp scope xem/sửa không hợp lệ
413 Giá trị status hoặc isStandard không hợp lệ
414 Không thể tạo hoặc gán quy tắc tiêu chuẩn qua API này
415 type quy tắc không hợp lệ
420 Chiều sắp xếp không hợp lệ
424 Trùng điều kiện người dùng
425 Trùng phần tử scope
428 Thiếu personnel ID
429 Thiếu department ID
430 Thiếu position hoặc role ID
434 Mô tả dài hơn 500 ký tự
501 Không tìm thấy quy tắc
504 Không tìm thấy field được điều kiện hoặc scope tham chiếu
506 Không tìm thấy Object
524 Object đã đạt giới hạn 50 quy tắc bảo mật
525 Không tìm thấy nhân sự
526 Không tìm thấy phòng ban
527 Không tìm thấy vị trí hoặc vai trò
528 Object này không cho phép tạo quy tắc bảo mật tuỳ chỉnh
600 Không xử lý được điều kiện bản ghi
700 Lỗi máy chủ

Ví dụ:

{
  "r": 407,
  "msg": "Duplicate name: Quyền truy cập đơn hàng giá trị cao"
}

Lưu ý sử dụng

  • Object, field, nhân sự, phòng ban, vị trí và vai trò phải thuộc cùng workspace với access token.
  • Nên lấy chi tiết quy tắc trước khi thay thế personnelFilters hoặc scopes, nhất là khi nhiều client có thể cùng chỉnh sửa một quy tắc.
  • Dùng status: 0 để vô hiệu hoá có thể khôi phục. Endpoint xoá không hỗ trợ khôi phục quy tắc.
  • Tách riêng quy tắc quyền tạo (type=1) và quy tắc quyền trên bản ghi đã tồn tại (type=2).
  • Một quy tắc chỉ cấp quyền khi điều kiện bản ghi, đối tượng áp dụng và scope đều phù hợp. Nên kiểm thử bằng người dùng và bản ghi đại diện trước khi kích hoạt rộng rãi.
avatar

blog.blogs_related

Giải pháp tùy biến và hợp nhất

Số hóa và tự động hóa hoàn toàn công tác vận hành và quản trị doanh nghiệp với Cogover!

Bắt đầu đổi mới phương thức vận hành và tự chủ hệ thống quản trị công việc của bạn

Dùng thử ngay
CogoverCogover

CÔNG TY CỔ PHẦN STRINGEE

GPKD số 0107938504, đăng ký ngày 27-07-2017, nơi cấp Sở Tài chính Thành phố Hà Nội
Địa chỉ: Tầng 19, Leadvisors Tower, số 643 Phạm Văn Đồng, Phường Nghĩa Đô, Thành phố Hà Nội, Việt Nam

Văn phòng

Hà Nội: Tầng 17, VP2, tòa Sun Square, 21 Lê Đức Thọ, phường Từ Liêm, TP Hà Nội
TP Hồ Chí Minh: Tầng 5, Lottery Tower, số 77 Trần Nhân Tôn, phường An Đông, TP Hồ Chí Minh
Mỹ: 838 Walker Road, Suite 21-2 Dover, Delaware 19904, United States
Ấn Độ: 804/805, Kosha Kommercial Komplex, Primal Nagar, Malad East, Mumbai - 400097
Dubai: CWS-1V-792740, Amber Gem Tower, Ajman, United Arab Emirates
Đã xác nhận
© 2026 Cogover LLC