| name | steedos-object-permissions |
| description | Multi-level permission control: object-level, field-level, record-level.
TRIGGER: .permission.yml, .permissionset.yml, .profile.yml, .role.yml,
.restrictionRule.yml; allowCreate/Read/Edit/Delete, viewAllRecords,
modifyAllRecords; readable_fields, editable_fields; restriction rules
(dynamic row-level filters); permission set, profile definition.
SKIP: button visibility (visibleOn) โ steedos-object-buttons;
field visible_on โ steedos-object-fields; tab permissions โ steedos-tabs.
|
Steedos Object Permissions | Steedos ๅฏน่ฑกๆ้
Overview | ๆฆ่ฟฐ
Steedos provides multi-level permission control: object-level, record-level, and field-level. Permissions are defined as separate .permission.yml files in the object's permissions/ subfolder.
Steedos ๆไพๅค็บงๅซๆ้ๆงๅถ๏ผๅฏน่ฑก็บงใ่ฎฐๅฝ็บงๅๅญๆฎต็บงใๆ้ไฝไธบ็ฌ็ซ็ .permission.yml ๆไปถๅฎไนๅจๅฏน่ฑก็ permissions/ ๅญๆไปถๅคนไธญใ
File Location | ๆไปถไฝ็ฝฎ
steedos-packages/
โโโ my-package/
โโโ main/default/
โโโ objects/
โ โโโ orders/
โ โโโ permissions/
โ โโโ user.permission.yml
โ โโโ admin.permission.yml
โ โโโ sales_manager.permission.yml
โโโ permissionsets/
โ โโโ sales.permissionset.yml
โ โโโ finance.permissionset.yml
โโโ profiles/
โ โโโ user.profile.yml
โโโ roles/
โ โโโ sales_manager.role.yml
โโโ restrictionRules/
โโโ user_filter.restrictionRule.yml
Object Permission (.permission.yml) | ๅฏน่ฑกๆ้
name: orders.user
permission_set_id: user
allowCreate: true
allowRead: true
allowEdit: true
allowDelete: false
allowExport: true
viewAllRecords: true
modifyAllRecords: false
allowReadFiles: true
allowCreateFiles: true
allowEditFiles: true
allowDeleteFiles: false
viewAllFiles: true
modifyAllFiles: false
field_permissions: []
Permission Properties | ๆ้ๅฑๆง
| Property | Type | Required | Description |
|---|
name | string | Yes | โ ๏ธ MUST NOT be omitted. Format: {objectName}.{permissionSetId} |
permission_set_id | string | Yes | Permission set name |
allowCreate | boolean | No | Can create new records |
allowRead | boolean | No | Can view records |
allowEdit | boolean | No | Can edit records |
allowDelete | boolean | No | Can delete records |
allowExport | boolean | No | Can export records |
viewAllRecords | boolean | No | Can view all records |
modifyAllRecords | boolean | No | Can edit all records |
allowReadFiles | boolean | No | Can read file attachments |
allowCreateFiles | boolean | No | Can upload files |
allowEditFiles | boolean | No | Can edit files |
allowDeleteFiles | boolean | No | Can delete files |
viewAllFiles | boolean | No | Can view all files |
modifyAllFiles | boolean | No | Can modify all files |
field_permissions | array | No | Field-level permissions |
Complete Examples | ๅฎๆด็คบไพ
Regular User Permission | ๆฎ้็จๆทๆ้
name: orders.user
permission_set_id: user
allowCreate: true
allowRead: true
allowEdit: true
allowDelete: false
allowExport: true
viewAllRecords: false
modifyAllRecords: false
allowReadFiles: true
allowCreateFiles: true
allowEditFiles: true
allowDeleteFiles: false
viewAllFiles: false
modifyAllFiles: false
field_permissions: []
Admin Permission | ็ฎก็ๅๆ้
name: orders.admin
permission_set_id: admin
allowCreate: true
allowRead: true
allowEdit: true
allowDelete: true
allowExport: true
viewAllRecords: true
modifyAllRecords: true
allowReadFiles: true
allowCreateFiles: true
allowEditFiles: true
allowDeleteFiles: true
viewAllFiles: true
modifyAllFiles: true
field_permissions: []
Custom Permission with Field Restrictions | ๅธฆๅญๆฎต้ๅถ็่ชๅฎไนๆ้
name: orders.customer_service
permission_set_id: customer_service
allowCreate: true
allowRead: true
allowEdit: true
allowDelete: false
viewAllRecords: true
modifyAllRecords: false
field_permissions:
- field: profit_margin
readable: false
editable: false
- field: internal_notes
readable: false
editable: false
Permission Set (.permissionset.yml) | ๆ้้
Permission sets group permissions and can be assigned to users:
name: sales
label: Sales Team
type: permission_set
locked: false
name: finance
label: Finance Team
type: permission_set
enable_MFA: false
login_expiration_in_days: 90
locked: false
Profile (.profile.yml) | ็ฎๆกฃ
Profiles assign applications to user groups:
name: user
label: Standard User
type: profile
assigned_apps:
- crm
- orders
- projects
max_login_attempts: '0'
lockout_interval: '15'
password_history: '3'
Role (.role.yml) | ่ง่ฒ
name: Sales Manager
api_name: sales_manager
label: Sales Manager
locked: false
Restriction Rules (.restrictionRule.yml) | ้ๅถ่งๅ
Restrict record visibility based on user attributes:
name: user_order_filter
object_name: orders
active: true
entry_criteria: '{{$user.profile == "user"}}'
record_filter: >
{{[
["owner", "=", "$user.userId"],
"or",
["assigned_to", "=", "$user.userId"]
]}}
Record-Level Permissions | ่ฎฐๅฝ็บงๆ้
Ownership-Based | ๅบไบๆๆๆ
modifyAllRecords: false
viewAllRecords: false
Company-Based | ๅบไบๅ
ฌๅธ
viewCompanyRecords: true
modifyCompanyRecords: true
Dynamic Permissions with Triggers | ่งฆๅๅจๅจๆๆ้
For complex permission logic, use triggers:
name: contracts_permission
listenTo: contracts
when:
- beforeUpdate
isEnabled: true
type: code
handler: |-
const { doc, previousDoc } = ctx.params;
// Only owner or admin can change status
if (doc.status && doc.status !== previousDoc.status) {
if (previousDoc.owner !== ctx.userId) {
const user = await ctx.getUser(ctx.userId, ctx.spaceId);
if (!user.is_admin) {
throw new Error('Only contract owner or admin can change status');
}
}
}
return { doc };
Best Practices | ๆไฝณๅฎ่ทต
- Principle of least privilege: Start with minimal permissions, add as needed
- Protect sensitive fields: Use
field_permissions to hide salary, SSN, etc.
- Use restriction rules: For row-level security beyond simple ownership
- Separate permission sets per role: Create distinct permission sets for sales, finance, HR, etc.
- Always define both user and admin: Every object should have at least these two permission sets