[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-rbac-to-data-permissions-en":3,"blog-related-rbac-to-data-permissions-en":29,"blog-adjacent-rbac-to-data-permissions-en":63},{"id":4,"slug":5,"title":6,"excerpt":7,"content":8,"cover":9,"tone":10,"author":11,"publishedAt":12,"updatedAt":12,"readingMinutes":13,"featured":14,"tags":15,"category":19,"seoSettings":28},32,"rbac-to-data-permissions","Permissions: From Roles to Data Scope","Most admin systems stop at menus and buttons. The hard part is showing each person only the data they should see.","\u003Cp>Enterprise backends usually have three layers of permission: who can sign in, which menus they see and which buttons they can press. Once those exist, clients ask for a fourth: the same page should show different data to different people.\u003C\u002Fp>\n\u003Ch2>Three common data scopes\u003C\u002Fh2>\n\u003Cp>By organisation: a department manager sees their department, a regional manager their region, headquarters everything.\u003C\u002Fp>\n\u003Cp>By ownership: sales see their own clients, leads see the team, administrators see all.\u003C\u002Fp>\n\u003Cp>By classification: contracts and payroll are authorised individually, independent of role.\u003C\u002Fp>\n\u003Ch2>Two implementation notes\u003C\u002Fh2>\n\u003Cp>Do not scatter if-statements through business code. Extract the scope into a query condition builder and inject it centrally.\u003C\u002Fp>\n\u003Cp>Permission changes need an audit trail: who changed whose access, and when. When something goes wrong, you can trace it.\u003C\u002Fp>\n\u003Cp>Permission design is not about restricting people. It is about letting everyone work freely inside their responsibility, with out-of-scope actions blocked by default.\u003C\u002Fp>","","indigo","佳益方圆团队","2026-09-23T11:26:00+08:00",1,false,[16,17,18],"Permissions","Admin","Architecture",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},0,"engineering","Engineering","Hands-on engineering practices in architecture, performance optimization, AI integration and cross-platform delivery from our R and D team.","cpu","blue","article",60,{},[30,41,52],{"id":31,"slug":32,"title":33,"excerpt":34,"content":9,"cover":9,"tone":35,"author":11,"publishedAt":36,"updatedAt":36,"readingMinutes":13,"featured":14,"tags":37,"category":40},30,"integration-api-pitfalls","Five Traps in Enterprise System Integration","However complete the API documentation is, integration usually stalls on field semantics, timeouts and repeated pushes.","cyan","2026-10-17T09:00:00+08:00",[38,39,22],"Integration","APIs",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":13,"slug":42,"title":43,"excerpt":44,"content":9,"cover":9,"tone":35,"author":11,"publishedAt":45,"updatedAt":46,"readingMinutes":47,"featured":48,"tags":49,"category":51},"why-enterprise-systems-age","Why Enterprise Systems Start to Age After Three Years","A system can pass acceptance with every feature checked, then feel awkward three years later. The problem is rarely the code — it is the changes that were never considered at delivery.","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",2,true,[50,18],"System Evolution",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":53,"slug":54,"title":55,"excerpt":56,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":57,"updatedAt":57,"readingMinutes":13,"featured":14,"tags":58,"category":62},31,"idempotent-design-basics","Idempotency: Duplicate Submissions Are Not Just Double Clicks","Retries, redelivery and impatient users all send the same request more than once. Idempotency belongs in the API design.","2026-10-05T10:13:00+08:00",[59,60,61],"API Design","Idempotency","Reliability",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"previous":64,"next":75},{"id":65,"slug":66,"title":67,"excerpt":68,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":69,"updatedAt":70,"readingMinutes":13,"featured":14,"tags":71,"category":74},3,"miniapp-or-app","Mini Program or App? Start with Where the Business Happens","Technical preference should not decide the platform. Frequency, sharing, retention and capability boundaries are what really determine the right carrier.","2026-09-25T09:00:00+08:00","2026-10-18T15:58:14.677+08:00",[72,73],"Mobile","Technology Selection",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":76,"slug":77,"title":78,"excerpt":79,"content":9,"cover":9,"tone":80,"author":11,"publishedAt":81,"updatedAt":81,"readingMinutes":13,"featured":14,"tags":82,"category":86},52,"user-interview-questions","Three Questions Worth Asking in User Interviews","Asking what people want yields imagination; asking what they did last time yields facts.","teal","2026-09-21T11:26:00+08:00",[83,84,85],"Research","Interviews","Product",{"id":47,"parentId":20,"slug":87,"name":88,"description":89,"icon":90,"cover":9,"tone":25,"kind":26,"sortOrder":91,"count":20},"product-thinking","Product Thinking","Requirement analysis, user experience and product design methods, plus the thinking from business problems to product solutions.","lightbulb",50]