[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"glossary-effective-permissions::en":3,"gloss-cluster-effective-permissions::en":26,"gloss-next-effective-permissions::en":9},{"slug":4,"category":5,"name":6,"definition":7,"meta_desc":8,"faq":9,"schema_markup":9,"related":10},"effective-permissions","integration","Effective Permissions","Effective permissions are what an integration can actually do once the source system has applied both the scopes the application was granted and the access rights of whoever granted them. Scopes describe the request. Effective permissions are what is left after the intersection, and the difference is the reason two identical installations of the same integration return different data.\n\nThe example is the whole concept. An integration authorised by a sales representative sees that representative's records. The same integration, with the same scopes and the same code, authorised by an administrator, sees everything in the organisation. Nothing in the connect flow discloses this: a consent screen lists the permissions the application asked for and says nothing about coverage. So the customer connects, the sync reports success, the copy is partial, and the ticket that eventually arrives says the integration is missing data — which is true, and is not a bug.\n\nIt cuts both ways, and the over-permissioned direction is the one that gets less attention. An integration authorised by an administrator copies records into a second system whose own access controls are almost always coarser than the source's, which is how a carefully permissioned dataset ends up readable by everyone who can open the destination. Under-permissioned is a correctness problem; over-permissioned is a disclosure problem, and neither announces itself, because a partial result and a complete result look identical from the outside.\n\nThe habits that address it are small. Record which account authorised each connection and show it in your own interface rather than burying it. Report coverage — how many records this connection can see — alongside whether the run succeeded, because that single number turns an invisible problem into a visible one. Recommend a deliberately scoped dedicated account rather than whoever happened to be signed in when someone clicked connect. And re-check after every reconnection, since a re-authorisation by a different person silently changes the shape of the sync without changing a line of configuration.","Effective permissions are the intersection of an app's scopes and the grantor's own access — why the same integration returns different data per installer.",null,[11,14,17,20,23],{"slug":12,"name":13},"audit-log","Audit Log (Audit Trail)",{"slug":15,"name":16},"least-privilege","Principle of Least Privilege",{"slug":18,"name":19},"oauth-scopes","OAuth Scopes",{"slug":21,"name":22},"service-account","Service Account",{"slug":24,"name":25},"tenant-isolation","Tenant Isolation",[27,31,34,38,41,44,47,50,53,56,59,62],{"slug":28,"category":5,"name":29,"updated_at":30},"api-deprecation","API Deprecation","2026-09-08T21:32:37+00:00",{"slug":32,"category":5,"name":33,"updated_at":30},"app-review","App Review",{"slug":35,"category":5,"name":36,"updated_at":37},"backend-for-frontend","Backend for Frontend (BFF)","2026-09-08T21:32:36+00:00",{"slug":39,"category":5,"name":40,"updated_at":30},"bulk-api","Bulk API",{"slug":42,"category":5,"name":43,"updated_at":37},"concurrency-limit","Concurrency Limit",{"slug":45,"category":5,"name":46,"updated_at":30},"connector-versioning","Connector Versioning",{"slug":48,"category":5,"name":49,"updated_at":30},"delete-propagation","Delete Propagation",{"slug":51,"category":5,"name":52,"updated_at":37},"event-ordering","Event Ordering",{"slug":54,"category":5,"name":55,"updated_at":37},"field-mapping","Field Mapping",{"slug":57,"category":5,"name":58,"updated_at":37},"function-schema","Function Schema",{"slug":60,"category":5,"name":61,"updated_at":37},"grpc","gRPC",{"slug":63,"category":5,"name":64,"updated_at":37},"integration-marketplace","Integration Marketplace"]