@itwin/access-control-client 3.6.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +121 -22
- package/README.md +147 -669
- package/lib/cjs/AccessControlClient.d.ts +26 -9
- package/lib/cjs/AccessControlClient.d.ts.map +1 -1
- package/lib/cjs/AccessControlClient.js +21 -5
- package/lib/cjs/AccessControlClient.js.map +1 -1
- package/lib/cjs/access-control-client.d.ts +30 -1
- package/lib/cjs/access-control-client.d.ts.map +1 -1
- package/lib/cjs/access-control-client.js +42 -6
- package/lib/cjs/access-control-client.js.map +1 -1
- package/lib/cjs/accessControlClientInterfaces/GroupClient.d.ts +19 -0
- package/lib/cjs/accessControlClientInterfaces/GroupClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/GroupClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts +15 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.d.ts +19 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.d.ts +12 -0
- package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.d.ts +25 -0
- package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.d.ts +10 -0
- package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .d.ts +13 -0
- package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .js +7 -0
- package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/PermissionsClient.d.ts +10 -0
- package/lib/cjs/accessControlClientInterfaces/PermissionsClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/PermissionsClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/PermissionsClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/RolesClient.d.ts +16 -0
- package/lib/cjs/accessControlClientInterfaces/RolesClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/RolesClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/RolesClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/UserMembersClient.d.ts +16 -0
- package/lib/cjs/accessControlClientInterfaces/UserMembersClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/UserMembersClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/UserMembersClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/accessControl.d.ts +23 -0
- package/lib/cjs/accessControlClientInterfaces/accessControl.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/accessControl.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/accessControl.js.map +1 -0
- package/lib/cjs/subClients/BaseClient.d.ts +88 -22
- package/lib/cjs/subClients/BaseClient.d.ts.map +1 -1
- package/lib/cjs/subClients/BaseClient.js +174 -34
- package/lib/cjs/subClients/BaseClient.js.map +1 -1
- package/lib/cjs/subClients/GroupMemberInvitationsClient.d.ts +33 -0
- package/lib/cjs/subClients/GroupMemberInvitationsClient.d.ts.map +1 -0
- package/lib/cjs/subClients/GroupMemberInvitationsClient.js +48 -0
- package/lib/cjs/subClients/GroupMemberInvitationsClient.js.map +1 -0
- package/lib/cjs/subClients/GroupMembersClient.d.ts +16 -6
- package/lib/cjs/subClients/GroupMembersClient.d.ts.map +1 -1
- package/lib/cjs/subClients/GroupMembersClient.js +22 -13
- package/lib/cjs/subClients/GroupMembersClient.js.map +1 -1
- package/lib/cjs/subClients/GroupsClient.d.ts +17 -9
- package/lib/cjs/subClients/GroupsClient.d.ts.map +1 -1
- package/lib/cjs/subClients/GroupsClient.js +22 -10
- package/lib/cjs/subClients/GroupsClient.js.map +1 -1
- package/lib/cjs/subClients/ITwinJobsClient.d.ts +12 -5
- package/lib/cjs/subClients/ITwinJobsClient.d.ts.map +1 -1
- package/lib/cjs/subClients/ITwinJobsClient.js +15 -3
- package/lib/cjs/subClients/ITwinJobsClient.js.map +1 -1
- package/lib/cjs/subClients/ItwinShares.d.ts +61 -0
- package/lib/cjs/subClients/ItwinShares.d.ts.map +1 -0
- package/lib/cjs/subClients/ItwinShares.js +77 -0
- package/lib/cjs/subClients/ItwinShares.js.map +1 -0
- package/lib/cjs/subClients/MemberInvitationsClient.d.ts +16 -3
- package/lib/cjs/subClients/MemberInvitationsClient.d.ts.map +1 -1
- package/lib/cjs/subClients/MemberInvitationsClient.js +22 -7
- package/lib/cjs/subClients/MemberInvitationsClient.js.map +1 -1
- package/lib/cjs/subClients/OwnerMembersClient.d.ts +45 -6
- package/lib/cjs/subClients/OwnerMembersClient.d.ts.map +1 -1
- package/lib/cjs/subClients/OwnerMembersClient.js +50 -10
- package/lib/cjs/subClients/OwnerMembersClient.js.map +1 -1
- package/lib/cjs/subClients/PermissionsClient.d.ts +10 -3
- package/lib/cjs/subClients/PermissionsClient.d.ts.map +1 -1
- package/lib/cjs/subClients/PermissionsClient.js +14 -2
- package/lib/cjs/subClients/PermissionsClient.js.map +1 -1
- package/lib/cjs/subClients/RolesClient.d.ts +13 -8
- package/lib/cjs/subClients/RolesClient.d.ts.map +1 -1
- package/lib/cjs/subClients/RolesClient.js +18 -6
- package/lib/cjs/subClients/RolesClient.js.map +1 -1
- package/lib/cjs/subClients/UserMembersClient.d.ts +13 -6
- package/lib/cjs/subClients/UserMembersClient.d.ts.map +1 -1
- package/lib/cjs/subClients/UserMembersClient.js +21 -9
- package/lib/cjs/subClients/UserMembersClient.js.map +1 -1
- package/lib/cjs/types/CommonApiTypes.d.ts +78 -0
- package/lib/cjs/types/CommonApiTypes.d.ts.map +1 -0
- package/lib/cjs/types/CommonApiTypes.js +7 -0
- package/lib/cjs/types/CommonApiTypes.js.map +1 -0
- package/lib/cjs/types/GroupMember.d.ts +75 -0
- package/lib/cjs/types/GroupMember.d.ts.map +1 -0
- package/lib/cjs/types/GroupMember.js +7 -0
- package/lib/cjs/types/GroupMember.js.map +1 -0
- package/lib/cjs/types/Groups.d.ts +64 -0
- package/lib/cjs/types/Groups.d.ts.map +1 -0
- package/lib/cjs/types/Groups.js +7 -0
- package/lib/cjs/types/Groups.js.map +1 -0
- package/lib/cjs/types/ITwinJob.d.ts +70 -0
- package/lib/cjs/types/ITwinJob.d.ts.map +1 -0
- package/lib/cjs/types/ITwinJob.js +7 -0
- package/lib/cjs/types/ITwinJob.js.map +1 -0
- package/lib/cjs/types/Invitations.d.ts +128 -0
- package/lib/cjs/types/Invitations.d.ts.map +1 -0
- package/lib/cjs/types/Invitations.js +7 -0
- package/lib/cjs/types/Invitations.js.map +1 -0
- package/lib/cjs/types/Members.d.ts +71 -0
- package/lib/cjs/types/Members.d.ts.map +1 -0
- package/lib/cjs/types/Members.js +7 -0
- package/lib/cjs/types/Members.js.map +1 -0
- package/lib/cjs/types/OwnerMember.d.ts +105 -0
- package/lib/cjs/types/OwnerMember.d.ts.map +1 -0
- package/lib/cjs/types/OwnerMember.js +7 -0
- package/lib/cjs/types/OwnerMember.js.map +1 -0
- package/lib/cjs/types/Permission.d.ts +5 -0
- package/lib/cjs/types/Permission.d.ts.map +1 -0
- package/lib/cjs/types/Permission.js +7 -0
- package/lib/cjs/types/Permission.js.map +1 -0
- package/lib/cjs/types/Role.d.ts +33 -0
- package/lib/cjs/types/Role.d.ts.map +1 -0
- package/lib/cjs/types/Role.js +7 -0
- package/lib/cjs/types/Role.js.map +1 -0
- package/lib/cjs/types/ShareContract.d.ts +80 -0
- package/lib/cjs/types/ShareContract.d.ts.map +1 -0
- package/lib/cjs/types/ShareContract.js +7 -0
- package/lib/cjs/types/ShareContract.js.map +1 -0
- package/lib/cjs/types/UserMembers.d.ts +115 -0
- package/lib/cjs/types/UserMembers.d.ts.map +1 -0
- package/lib/cjs/types/UserMembers.js +7 -0
- package/lib/cjs/types/UserMembers.js.map +1 -0
- package/lib/cjs/types/links.d.ts +20 -0
- package/lib/cjs/types/links.d.ts.map +1 -0
- package/lib/cjs/types/links.js +7 -0
- package/lib/cjs/types/links.js.map +1 -0
- package/lib/cjs/types/typeUtils.d.ts +42 -0
- package/lib/cjs/types/typeUtils.d.ts.map +1 -0
- package/lib/cjs/types/typeUtils.js +25 -0
- package/lib/cjs/types/typeUtils.js.map +1 -0
- package/lib/esm/AccessControlClient.d.ts +26 -9
- package/lib/esm/AccessControlClient.d.ts.map +1 -1
- package/lib/esm/AccessControlClient.js +31 -5
- package/lib/esm/AccessControlClient.js.map +1 -1
- package/lib/esm/access-control-client.d.ts +30 -1
- package/lib/esm/access-control-client.d.ts.map +1 -1
- package/lib/esm/access-control-client.js +33 -1
- package/lib/esm/access-control-client.js.map +1 -1
- package/lib/esm/accessControlClientInterfaces/GroupClient.d.ts +19 -0
- package/lib/esm/accessControlClientInterfaces/GroupClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/GroupClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts +15 -0
- package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupMembersClient.d.ts +19 -0
- package/lib/esm/accessControlClientInterfaces/GroupMembersClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupMembersClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/GroupMembersClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.d.ts +12 -0
- package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.d.ts +25 -0
- package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.d.ts +10 -0
- package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .d.ts +13 -0
- package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .js +6 -0
- package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/PermissionsClient.d.ts +10 -0
- package/lib/esm/accessControlClientInterfaces/PermissionsClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/PermissionsClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/PermissionsClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/RolesClient.d.ts +16 -0
- package/lib/esm/accessControlClientInterfaces/RolesClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/RolesClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/RolesClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/UserMembersClient.d.ts +16 -0
- package/lib/esm/accessControlClientInterfaces/UserMembersClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/UserMembersClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/UserMembersClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/accessControl.d.ts +23 -0
- package/lib/esm/accessControlClientInterfaces/accessControl.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/accessControl.js +6 -0
- package/lib/esm/accessControlClientInterfaces/accessControl.js.map +1 -0
- package/lib/esm/subClients/BaseClient.d.ts +88 -22
- package/lib/esm/subClients/BaseClient.d.ts.map +1 -1
- package/lib/esm/subClients/BaseClient.js +175 -35
- package/lib/esm/subClients/BaseClient.js.map +1 -1
- package/lib/esm/subClients/GroupMemberInvitationsClient.d.ts +33 -0
- package/lib/esm/subClients/GroupMemberInvitationsClient.d.ts.map +1 -0
- package/lib/esm/subClients/GroupMemberInvitationsClient.js +44 -0
- package/lib/esm/subClients/GroupMemberInvitationsClient.js.map +1 -0
- package/lib/esm/subClients/GroupMembersClient.d.ts +16 -6
- package/lib/esm/subClients/GroupMembersClient.d.ts.map +1 -1
- package/lib/esm/subClients/GroupMembersClient.js +22 -13
- package/lib/esm/subClients/GroupMembersClient.js.map +1 -1
- package/lib/esm/subClients/GroupsClient.d.ts +17 -9
- package/lib/esm/subClients/GroupsClient.d.ts.map +1 -1
- package/lib/esm/subClients/GroupsClient.js +22 -10
- package/lib/esm/subClients/GroupsClient.js.map +1 -1
- package/lib/esm/subClients/ITwinJobsClient.d.ts +12 -5
- package/lib/esm/subClients/ITwinJobsClient.d.ts.map +1 -1
- package/lib/esm/subClients/ITwinJobsClient.js +15 -3
- package/lib/esm/subClients/ITwinJobsClient.js.map +1 -1
- package/lib/esm/subClients/ItwinShares.d.ts +61 -0
- package/lib/esm/subClients/ItwinShares.d.ts.map +1 -0
- package/lib/esm/subClients/ItwinShares.js +73 -0
- package/lib/esm/subClients/ItwinShares.js.map +1 -0
- package/lib/esm/subClients/MemberInvitationsClient.d.ts +16 -3
- package/lib/esm/subClients/MemberInvitationsClient.d.ts.map +1 -1
- package/lib/esm/subClients/MemberInvitationsClient.js +22 -7
- package/lib/esm/subClients/MemberInvitationsClient.js.map +1 -1
- package/lib/esm/subClients/OwnerMembersClient.d.ts +45 -6
- package/lib/esm/subClients/OwnerMembersClient.d.ts.map +1 -1
- package/lib/esm/subClients/OwnerMembersClient.js +50 -10
- package/lib/esm/subClients/OwnerMembersClient.js.map +1 -1
- package/lib/esm/subClients/PermissionsClient.d.ts +10 -3
- package/lib/esm/subClients/PermissionsClient.d.ts.map +1 -1
- package/lib/esm/subClients/PermissionsClient.js +14 -2
- package/lib/esm/subClients/PermissionsClient.js.map +1 -1
- package/lib/esm/subClients/RolesClient.d.ts +13 -8
- package/lib/esm/subClients/RolesClient.d.ts.map +1 -1
- package/lib/esm/subClients/RolesClient.js +18 -6
- package/lib/esm/subClients/RolesClient.js.map +1 -1
- package/lib/esm/subClients/UserMembersClient.d.ts +13 -6
- package/lib/esm/subClients/UserMembersClient.d.ts.map +1 -1
- package/lib/esm/subClients/UserMembersClient.js +21 -9
- package/lib/esm/subClients/UserMembersClient.js.map +1 -1
- package/lib/esm/types/CommonApiTypes.d.ts +78 -0
- package/lib/esm/types/CommonApiTypes.d.ts.map +1 -0
- package/lib/esm/types/CommonApiTypes.js +6 -0
- package/lib/esm/types/CommonApiTypes.js.map +1 -0
- package/lib/esm/types/GroupMember.d.ts +75 -0
- package/lib/esm/types/GroupMember.d.ts.map +1 -0
- package/lib/esm/types/GroupMember.js +6 -0
- package/lib/esm/types/GroupMember.js.map +1 -0
- package/lib/esm/types/Groups.d.ts +64 -0
- package/lib/esm/types/Groups.d.ts.map +1 -0
- package/lib/esm/types/Groups.js +6 -0
- package/lib/esm/types/Groups.js.map +1 -0
- package/lib/esm/types/ITwinJob.d.ts +70 -0
- package/lib/esm/types/ITwinJob.d.ts.map +1 -0
- package/lib/esm/types/ITwinJob.js +6 -0
- package/lib/esm/types/ITwinJob.js.map +1 -0
- package/lib/esm/types/Invitations.d.ts +128 -0
- package/lib/esm/types/Invitations.d.ts.map +1 -0
- package/lib/esm/types/Invitations.js +6 -0
- package/lib/esm/types/Invitations.js.map +1 -0
- package/lib/esm/types/Members.d.ts +71 -0
- package/lib/esm/types/Members.d.ts.map +1 -0
- package/lib/esm/types/Members.js +6 -0
- package/lib/esm/types/Members.js.map +1 -0
- package/lib/esm/types/OwnerMember.d.ts +105 -0
- package/lib/esm/types/OwnerMember.d.ts.map +1 -0
- package/lib/esm/types/OwnerMember.js +6 -0
- package/lib/esm/types/OwnerMember.js.map +1 -0
- package/lib/esm/types/Permission.d.ts +5 -0
- package/lib/esm/types/Permission.d.ts.map +1 -0
- package/lib/esm/types/Permission.js +6 -0
- package/lib/esm/types/Permission.js.map +1 -0
- package/lib/esm/types/Role.d.ts +33 -0
- package/lib/esm/types/Role.d.ts.map +1 -0
- package/lib/esm/types/Role.js +6 -0
- package/lib/esm/types/Role.js.map +1 -0
- package/lib/esm/types/ShareContract.d.ts +80 -0
- package/lib/esm/types/ShareContract.d.ts.map +1 -0
- package/lib/esm/types/ShareContract.js +6 -0
- package/lib/esm/types/ShareContract.js.map +1 -0
- package/lib/esm/types/UserMembers.d.ts +115 -0
- package/lib/esm/types/UserMembers.d.ts.map +1 -0
- package/lib/esm/types/UserMembers.js +6 -0
- package/lib/esm/types/UserMembers.js.map +1 -0
- package/lib/esm/types/links.d.ts +20 -0
- package/lib/esm/types/links.d.ts.map +1 -0
- package/lib/esm/types/links.js +6 -0
- package/lib/esm/types/links.js.map +1 -0
- package/lib/esm/types/typeUtils.d.ts +42 -0
- package/lib/esm/types/typeUtils.d.ts.map +1 -0
- package/lib/esm/types/typeUtils.js +22 -0
- package/lib/esm/types/typeUtils.js.map +1 -0
- package/package.json +58 -47
- package/CONTRIBUTING.md +0 -90
- package/GETTINGSTARTED.md +0 -35
- package/lib/cjs/accessControlTypes.d.ts +0 -229
- package/lib/cjs/accessControlTypes.d.ts.map +0 -1
- package/lib/cjs/accessControlTypes.js +0 -25
- package/lib/cjs/accessControlTypes.js.map +0 -1
- package/lib/esm/accessControlTypes.d.ts +0 -229
- package/lib/esm/accessControlTypes.d.ts.map +0 -1
- package/lib/esm/accessControlTypes.js +0 -22
- package/lib/esm/accessControlTypes.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,747 +1,225 @@
|
|
|
1
1
|
# Access Control Client Library
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://badge.fury.io/js/@itwin%2Faccess-control-client)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
A comprehensive TypeScript library for Bentley Systems' Access Control API, providing type-safe access to iTwin access management, roles, permissions, groups, and member operations.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Table of Contents
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
- [Quick Start](#quick-start)
|
|
10
|
+
- [Installation](#installation)
|
|
11
|
+
- [Basic Usage](#basic-usage)
|
|
12
|
+
- [Documentation](#documentation)
|
|
13
|
+
- [API Reference](#api-reference)
|
|
14
|
+
- [About this Repository](#about-this-repository)
|
|
15
|
+
- [Development](#development)
|
|
16
|
+
- [Contributing](#contributing)
|
|
17
|
+
- [License](#license)
|
|
12
18
|
|
|
13
|
-
##
|
|
19
|
+
## Quick Start
|
|
14
20
|
|
|
15
|
-
|
|
21
|
+
Get up and running with Access Control Client in just a few steps:
|
|
16
22
|
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
import {
|
|
20
|
-
AccessControlClient,
|
|
21
|
-
IAccessControlClient,
|
|
22
|
-
Role,
|
|
23
|
-
AccessControlAPIResponse,
|
|
24
|
-
} from "@itwin/access-control-client";
|
|
25
|
-
|
|
26
|
-
/** Function that queries all Roles for a given iTwin and prints their ids to the console. */
|
|
27
|
-
async function printiTwinRoleIds(): Promise<void> {
|
|
28
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
29
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
30
|
-
|
|
31
|
-
const iTwinsResponse: AccessControlAPIResponse<Role[]> =
|
|
32
|
-
await accessControlClient.roles.getITwinRolesAsync(
|
|
33
|
-
accessToken,
|
|
34
|
-
"2f981e83-47e4-4f36-8ee9-4264453688a1"
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
iTwinsResponse.data!.forEach((actualRole: Role) => {
|
|
38
|
-
console.log(actualRole.id);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
23
|
+
```bash
|
|
24
|
+
npm install @itwin/access-control-client
|
|
41
25
|
```
|
|
42
26
|
|
|
43
|
-
### Get list of Roles for an iTwin (with custom url)
|
|
44
|
-
|
|
45
27
|
```typescript
|
|
46
|
-
import
|
|
47
|
-
import {
|
|
48
|
-
AccessControlClient,
|
|
49
|
-
IAccessControlClient,
|
|
50
|
-
Role,
|
|
51
|
-
AccessControlAPIResponse,
|
|
52
|
-
} from "@itwin/access-control-client";
|
|
28
|
+
import { AccessControlClient } from "@itwin/access-control-client";
|
|
53
29
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
);
|
|
59
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
60
|
-
|
|
61
|
-
const iTwinsResponse: AccessControlAPIResponse<Role[]> =
|
|
62
|
-
await accessControlClient.roles.getITwinRolesAsync(
|
|
63
|
-
accessToken,
|
|
64
|
-
"2f981e83-47e4-4f36-8ee9-4264453688a1"
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
iTwinsResponse.data!.forEach((actualRole: Role) => {
|
|
68
|
-
console.log(actualRole.id);
|
|
69
|
-
});
|
|
70
|
-
}
|
|
30
|
+
const client = new AccessControlClient();
|
|
31
|
+
const accessToken = "your-access-token-string";
|
|
32
|
+
const roles = await client.roles.getITwinRoles(accessToken, "itwin-id");
|
|
33
|
+
console.log(`Found ${roles.data!.length} roles`);
|
|
71
34
|
```
|
|
72
35
|
|
|
73
|
-
|
|
36
|
+
## Installation
|
|
74
37
|
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
AccessControlClient,
|
|
79
|
-
IAccessControlClient,
|
|
80
|
-
Role,
|
|
81
|
-
AccessControlAPIResponse,
|
|
82
|
-
} from "@itwin/access-control-client";
|
|
83
|
-
|
|
84
|
-
/** Function that gets a specific role for an iTwin and then prints the id and displayName to the console. */
|
|
85
|
-
async function printiTwinRole(): Promise<void> {
|
|
86
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
87
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
88
|
-
|
|
89
|
-
const iTwinsResponse: AccessControlAPIResponse<Role> =
|
|
90
|
-
await accessControlClient.roles.getITwinRoleAsync(
|
|
91
|
-
accessToken,
|
|
92
|
-
"2f981e83-47e4-4f36-8ee9-4264453688a1",
|
|
93
|
-
"2d593231-db14-4c1f-9db4-96f2b91b0bde"
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
const actualRole = iTwinsResponse.data!;
|
|
97
|
-
console.log(actualRole.id, actualRole.displayName);
|
|
98
|
-
}
|
|
99
|
-
```
|
|
38
|
+
```bash
|
|
39
|
+
# Using npm
|
|
40
|
+
npm install @itwin/access-control-client
|
|
100
41
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
```typescript
|
|
104
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
105
|
-
import {
|
|
106
|
-
AccessControlClient,
|
|
107
|
-
IAccessControlClient,
|
|
108
|
-
Role,
|
|
109
|
-
AccessControlAPIResponse,
|
|
110
|
-
} from "@itwin/access-control-client";
|
|
42
|
+
# Using yarn
|
|
43
|
+
yarn add @itwin/access-control-client
|
|
111
44
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
115
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
116
|
-
|
|
117
|
-
// Create role
|
|
118
|
-
const createResponse: AccessControlAPIResponse<Role> =
|
|
119
|
-
await accessControlClient.roles.createITwinRoleAsync(
|
|
120
|
-
accessToken,
|
|
121
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
122
|
-
"d8215a6b-465d-44ff-910b-40d4541d1ebf"
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
// Update role
|
|
126
|
-
const updatedRole: Role = {
|
|
127
|
-
displayName: "Some new role name",
|
|
128
|
-
description: "UPDATED ROLE DESCRIPTION",
|
|
129
|
-
permissions: [],
|
|
130
|
-
};
|
|
131
|
-
const updateResponse: AccessControlAPIResponse<Role> =
|
|
132
|
-
await accessControlClient.roles.updateITwinRoleAsync(
|
|
133
|
-
accessToken,
|
|
134
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
135
|
-
createResponse.data!.id,
|
|
136
|
-
updatedRole
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
// Delete Role
|
|
140
|
-
const deleteResponse: AccessControlAPIResponse<undefined> =
|
|
141
|
-
await accessControlClient.roles.deleteITwinRoleAsync(
|
|
142
|
-
accessToken,
|
|
143
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
144
|
-
createResponse.data!.id
|
|
145
|
-
);
|
|
146
|
-
}
|
|
45
|
+
# Using pnpm
|
|
46
|
+
pnpm add @itwin/access-control-client
|
|
147
47
|
```
|
|
148
48
|
|
|
149
|
-
|
|
49
|
+
## Basic Usage
|
|
150
50
|
|
|
151
|
-
|
|
152
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
153
|
-
import {
|
|
154
|
-
AccessControlClient,
|
|
155
|
-
IAccessControlClient,
|
|
156
|
-
Member,
|
|
157
|
-
AccessControlAPIResponse,
|
|
158
|
-
} from "@itwin/access-control-client";
|
|
51
|
+
### Authentication
|
|
159
52
|
|
|
160
|
-
|
|
161
|
-
async function printiTwinUserMemberIds(): Promise<void> {
|
|
162
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
163
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
164
|
-
|
|
165
|
-
const iTwinsResponse: AccessControlAPIResponse<UserMember[]> =
|
|
166
|
-
await accessControlClient.userMembers.queryITwinUserMembersAsync(
|
|
167
|
-
accessToken,
|
|
168
|
-
"9bd7d24d-1508-4dba-99ab-23b3166401a0"
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
iTwinsResponse.data!.forEach((actualUserMember: UserMember) => {
|
|
172
|
-
console.log(actualUserMember.id);
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
```
|
|
53
|
+
All API methods require an access token string. See the [iTwin Platform documentation](https://developer.bentley.com/tutorials/create-and-query-itwins-guide/#1-register-an-application) for authentication setup.
|
|
176
54
|
|
|
177
|
-
###
|
|
55
|
+
### Environment Configuration
|
|
178
56
|
|
|
179
|
-
|
|
180
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
181
|
-
import {
|
|
182
|
-
AccessControlClient,
|
|
183
|
-
IAccessControlClient,
|
|
184
|
-
Member,
|
|
185
|
-
AccessControlAPIResponse,
|
|
186
|
-
} from "@itwin/access-control-client";
|
|
187
|
-
|
|
188
|
-
/** Function that queries all User Members for a given iTwin and prints their ids to the console. */
|
|
189
|
-
async function printiTwinUserMemberIds(): Promise<void> {
|
|
190
|
-
const skipAmmount = 5;
|
|
191
|
-
const topAmount = 3;
|
|
192
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
193
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
194
|
-
|
|
195
|
-
const iTwinsResponse: AccessControlAPIResponse<UserMember[]> =
|
|
196
|
-
await accessControlClient.userMembers.queryITwinUserMembersAsync(
|
|
197
|
-
accessToken,
|
|
198
|
-
"9bd7d24d-1508-4dba-99ab-23b3166401a0",
|
|
199
|
-
{ skip: skipAmmount, top: topAmount }
|
|
200
|
-
);
|
|
201
|
-
|
|
202
|
-
iTwinsResponse.data!.forEach((actualUserMember: UserMember) => {
|
|
203
|
-
console.log(actualUserMember.id);
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Get a specific User Member of an iTwin
|
|
57
|
+
Configure different deployment environments using `globalThis.IMJS_URL_PREFIX`:
|
|
209
58
|
|
|
210
59
|
```typescript
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
AccessControlClient,
|
|
214
|
-
IAccessControlClient,
|
|
215
|
-
Member,
|
|
216
|
-
AccessControlAPIResponse,
|
|
217
|
-
} from "@itwin/access-control-client";
|
|
60
|
+
// Development environment
|
|
61
|
+
globalThis.IMJS_URL_PREFIX = "dev-";
|
|
218
62
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
const iTwinsResponse: AccessControlAPIResponse<UserMember> =
|
|
225
|
-
await accessControlClient.userMembers.getITwinUserMemberAsync(
|
|
226
|
-
accessToken,
|
|
227
|
-
"9bd7d24d-1508-4dba-99ab-23b3166401a0",
|
|
228
|
-
"a083cc1c-f51a-4c52-8614-5774ab79eca1"
|
|
229
|
-
);
|
|
230
|
-
|
|
231
|
-
const actualUserMember = iTwinsResponse.data!;
|
|
232
|
-
console.log(actualUserMember.id, actualUserMember.email);
|
|
233
|
-
}
|
|
63
|
+
// QA environment
|
|
64
|
+
globalThis.IMJS_URL_PREFIX = "qa-";
|
|
65
|
+
|
|
66
|
+
// Production (default)
|
|
67
|
+
globalThis.IMJS_URL_PREFIX = undefined;
|
|
234
68
|
```
|
|
235
69
|
|
|
236
|
-
|
|
70
|
+
## Documentation
|
|
237
71
|
|
|
238
|
-
|
|
239
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
240
|
-
import {
|
|
241
|
-
AccessControlClient,
|
|
242
|
-
IAccessControlClient,
|
|
243
|
-
Member,
|
|
244
|
-
AccessControlAPIResponse,
|
|
245
|
-
} from "@itwin/access-control-client";
|
|
72
|
+
### Core Documentation
|
|
246
73
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
// Create user member
|
|
253
|
-
const createResponse: AccessControlAPIResponse<Role> =
|
|
254
|
-
await accessControlClient.userMembers.addITwinUserMembersAsync(
|
|
255
|
-
accessToken,
|
|
256
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
257
|
-
[
|
|
258
|
-
{
|
|
259
|
-
email: "user@example.com",
|
|
260
|
-
roleIds: ["d8215a6b-465d-44ff-910b-40d4541d1ebf"],
|
|
261
|
-
},
|
|
262
|
-
],
|
|
263
|
-
"Example custom message"
|
|
264
|
-
);
|
|
265
|
-
|
|
266
|
-
// Update user member's role
|
|
267
|
-
const updatedUserMemberResponse: AccessControlAPIResponse<UserMember> =
|
|
268
|
-
await accessControlClient.userMembers.updateITwinUserMemberAsync(
|
|
269
|
-
accessToken,
|
|
270
|
-
"b1803a0c-d440-4902-b527-54bf7f72500f",
|
|
271
|
-
"6401109c-75d7-46b8-8dbd-182d02155141",
|
|
272
|
-
[
|
|
273
|
-
"25162c0c-dce7-419e-bb51-fd13efd5b54a",
|
|
274
|
-
"10e3d778-0d35-4c4d-bf77-547bb366cb14",
|
|
275
|
-
]
|
|
276
|
-
);
|
|
277
|
-
|
|
278
|
-
// Delete user member
|
|
279
|
-
const removeUserMemberResponse: AccessControlAPIResponse<undefined> =
|
|
280
|
-
await accessControlClient.userMembers.removeITwinUserMemberAsync(
|
|
281
|
-
accessToken,
|
|
282
|
-
"b1803a0c-d440-4902-b527-54bf7f72500f",
|
|
283
|
-
"6401109c-75d7-46b8-8dbd-182d02155141"
|
|
284
|
-
);
|
|
285
|
-
}
|
|
286
|
-
```
|
|
74
|
+
| Document | Purpose |
|
|
75
|
+
|----------|---------|
|
|
76
|
+
| **[Getting Started Guide](./GETTINGSTARTED.md)** | Complete setup and first steps |
|
|
77
|
+
| **[Migration Guide v3→v4](./MIGRATION-GUIDE-v3-to-v4.md)** | Upgrading from v3.x to v4.x |
|
|
78
|
+
| **[Contributing Guide](./CONTRIBUTING.md)** | Development and contribution workflow |
|
|
287
79
|
|
|
288
|
-
|
|
80
|
+
## API Reference
|
|
289
81
|
|
|
290
|
-
|
|
291
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
292
|
-
import {
|
|
293
|
-
AccessControlClient,
|
|
294
|
-
IAccessControlClient,
|
|
295
|
-
OwnerMember,
|
|
296
|
-
AccessControlAPIResponse,
|
|
297
|
-
} from "@itwin/access-control-client";
|
|
82
|
+
### Core Classes
|
|
298
83
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
302
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
303
|
-
|
|
304
|
-
const iTwinsResponse: AccessControlAPIResponse<OwnerMember[]> =
|
|
305
|
-
await accessControlClient.ownerMembers.queryITwinOwnerMembersAsync(
|
|
306
|
-
accessToken,
|
|
307
|
-
"9bd7d24d-1508-4dba-99ab-23b3166401a0"
|
|
308
|
-
);
|
|
309
|
-
|
|
310
|
-
iTwinsResponse.data!.forEach((actualOwnerMember: OwnerMember) => {
|
|
311
|
-
console.log(actualOwnerMember.id);
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
```
|
|
84
|
+
- **`AccessControlClient`** - Main client for all access control operations
|
|
85
|
+
- **`IAccessControlClient`** - Interface defining the client API surface
|
|
315
86
|
|
|
316
|
-
###
|
|
87
|
+
### Sub-Clients
|
|
317
88
|
|
|
318
|
-
|
|
319
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
320
|
-
import {
|
|
321
|
-
AccessControlClient,
|
|
322
|
-
IAccessControlClient,
|
|
323
|
-
OwnerMember,
|
|
324
|
-
AccessControlAPIResponse,
|
|
325
|
-
} from "@itwin/access-control-client";
|
|
89
|
+
The `AccessControlClient` exposes the following specialized sub-clients:
|
|
326
90
|
|
|
327
|
-
|
|
328
|
-
async function createAndRemoveOwnerMember(): Promise<void> {
|
|
329
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
330
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
331
|
-
|
|
332
|
-
// Create owner member
|
|
333
|
-
const createOwnerMemberResponse: AccessControlAPIResponse<OwnerMember> =
|
|
334
|
-
await accessControlClient.ownerMembers.addITwinOwnerMemberAsync(
|
|
335
|
-
accessToken,
|
|
336
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
337
|
-
{
|
|
338
|
-
email: "test.user@bentley.com",
|
|
339
|
-
}
|
|
340
|
-
);
|
|
341
|
-
|
|
342
|
-
// Delete owner member
|
|
343
|
-
const removeOwnerMemberResponse: AccessControlAPIResponse<undefined> =
|
|
344
|
-
await accessControlClient.ownerMembers.removeITwinOwnerMemberAsync(
|
|
345
|
-
accessToken,
|
|
346
|
-
"b1803a0c-d440-4902-b527-54bf7f72500f",
|
|
347
|
-
"6401109c-75d7-46b8-8dbd-182d02155141"
|
|
348
|
-
);
|
|
349
|
-
}
|
|
350
|
-
```
|
|
91
|
+
#### Access Management
|
|
351
92
|
|
|
352
|
-
|
|
93
|
+
- **`permissions`** - Query permissions across the platform and iTwins
|
|
94
|
+
- **`roles`** - Manage iTwin roles (CRUD operations)
|
|
353
95
|
|
|
354
|
-
|
|
355
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
356
|
-
import {
|
|
357
|
-
AccessControlClient,
|
|
358
|
-
IAccessControlClient,
|
|
359
|
-
Group,
|
|
360
|
-
AccessControlAPIResponse,
|
|
361
|
-
} from "@itwin/access-control-client";
|
|
96
|
+
#### Group Management
|
|
362
97
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
367
|
-
|
|
368
|
-
const iTwinsResponse: AccessControlAPIResponse<Group[]> =
|
|
369
|
-
await accessControlClient.groups.getITwinGroupsAsync(
|
|
370
|
-
accessToken,
|
|
371
|
-
"2f981e83-47e4-4f36-8ee9-4264453688a1"
|
|
372
|
-
);
|
|
373
|
-
|
|
374
|
-
iTwinsResponse.data!.forEach((actualGroup: Group) => {
|
|
375
|
-
console.log(actualGroup.id);
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
```
|
|
98
|
+
- **`groups`** - Manage iTwin groups (CRUD operations)
|
|
99
|
+
- **`groupMembers`** - Manage members within groups
|
|
100
|
+
- **`groupMemberInvitations`** - Handle group member invitation lifecycle
|
|
379
101
|
|
|
380
|
-
|
|
102
|
+
#### User Management
|
|
381
103
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
AccessControlClient,
|
|
386
|
-
IAccessControlClient,
|
|
387
|
-
Group,
|
|
388
|
-
AccessControlAPIResponse,
|
|
389
|
-
} from "@itwin/access-control-client";
|
|
104
|
+
- **`userMembers`** - Manage individual user members of iTwins
|
|
105
|
+
- **`ownerMembers`** - Manage iTwin owner memberships
|
|
106
|
+
- **`memberInvitations`** - Handle member invitation lifecycle
|
|
390
107
|
|
|
391
|
-
|
|
392
|
-
async function printiTwinGroupIds(): Promise<void> {
|
|
393
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient(
|
|
394
|
-
"https://api.bentley.com/accesscontrol/itwins"
|
|
395
|
-
);
|
|
396
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
397
|
-
|
|
398
|
-
const iTwinsResponse: AccessControlAPIResponse<Group[]> =
|
|
399
|
-
await accessControlClient.groups.getITwinGroupsAsync(
|
|
400
|
-
accessToken,
|
|
401
|
-
"2f981e83-47e4-4f36-8ee9-4264453688a1"
|
|
402
|
-
);
|
|
403
|
-
|
|
404
|
-
iTwinsResponse.data!.forEach((actualGroup: Group) => {
|
|
405
|
-
console.log(actualGroup.id);
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
```
|
|
108
|
+
#### Advanced Operations
|
|
409
109
|
|
|
410
|
-
|
|
110
|
+
- **`itwinJobs`** - Bulk operations for member management
|
|
111
|
+
- **`itwinShares`** - Manage iTwin sharing and access tokens
|
|
411
112
|
|
|
412
|
-
|
|
413
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
414
|
-
import {
|
|
415
|
-
AccessControlClient,
|
|
416
|
-
IAccessControlClient,
|
|
417
|
-
Group,
|
|
418
|
-
AccessControlAPIResponse,
|
|
419
|
-
} from "@itwin/access-control-client";
|
|
113
|
+
### Key Features
|
|
420
114
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
const iTwinsResponse: AccessControlAPIResponse<Group> =
|
|
427
|
-
await accessControlClient.groups.getITwinGroupAsync(
|
|
428
|
-
accessToken,
|
|
429
|
-
"2f981e83-47e4-4f36-8ee9-4264453688a1",
|
|
430
|
-
"2d593231-db14-4c1f-9db4-96f2b91b0bde"
|
|
431
|
-
);
|
|
432
|
-
|
|
433
|
-
const actualGroup = iTwinsResponse.data!;
|
|
434
|
-
console.log(actualGroup.id, actualGroup.displayName);
|
|
435
|
-
}
|
|
436
|
-
```
|
|
115
|
+
- ✅ **Complete CRUD operations** for roles, groups, and members
|
|
116
|
+
- ✅ **Bulk operations** via iTwin Jobs
|
|
117
|
+
- ✅ **Invitation management** for users and groups
|
|
118
|
+
- ✅ **Sharing capabilities** for controlled iTwin access
|
|
119
|
+
- ✅ **Type-safe API** with full TypeScript support
|
|
437
120
|
|
|
438
|
-
###
|
|
121
|
+
### Quick Reference
|
|
439
122
|
|
|
440
123
|
```typescript
|
|
441
|
-
import
|
|
442
|
-
import {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
AccessControlAPIResponse,
|
|
124
|
+
import { AccessControlClient } from "@itwin/access-control-client";
|
|
125
|
+
import type {
|
|
126
|
+
BentleyAPIResponse,
|
|
127
|
+
Role,
|
|
128
|
+
MultipleUserMembersResponse
|
|
447
129
|
} from "@itwin/access-control-client";
|
|
448
130
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
453
|
-
|
|
454
|
-
// Create role
|
|
455
|
-
const createResponse: AccessControlAPIResponse<Group> =
|
|
456
|
-
await accessControlClient.groups.createITwinGroupAsync(
|
|
457
|
-
accessToken,
|
|
458
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
459
|
-
"d8215a6b-465d-44ff-910b-40d4541d1ebf"
|
|
460
|
-
);
|
|
461
|
-
|
|
462
|
-
// Update role
|
|
463
|
-
const updatedGroup: Group = {
|
|
464
|
-
name: "Some new group name",
|
|
465
|
-
description: "UPDATED GROUP DESCRIPTION",
|
|
466
|
-
user: ["John.Johnson@example.com"],
|
|
467
|
-
imsGroups: ["Sample IMS Group"],
|
|
468
|
-
};
|
|
469
|
-
const updateResponse: AccessControlAPIResponse<Group> =
|
|
470
|
-
await accessControlClient.groups.updateITwinGroupAsync(
|
|
471
|
-
accessToken,
|
|
472
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
473
|
-
createResponse.data!.id,
|
|
474
|
-
updatedGroup
|
|
475
|
-
);
|
|
476
|
-
|
|
477
|
-
// Delete Group
|
|
478
|
-
const deleteResponse: AccessControlAPIResponse<undefined> =
|
|
479
|
-
await accessControlClient.groups.deleteITwinGRoupAsync(
|
|
480
|
-
accessToken,
|
|
481
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
482
|
-
createResponse.data!.id
|
|
483
|
-
);
|
|
484
|
-
}
|
|
485
|
-
```
|
|
131
|
+
const client = new AccessControlClient();
|
|
132
|
+
const accessToken = "your-access-token-string";
|
|
133
|
+
const iTwinId = "your-itwin-id";
|
|
486
134
|
|
|
487
|
-
|
|
135
|
+
// Get roles
|
|
136
|
+
const roles = await client.roles.getITwinRoles(accessToken, iTwinId);
|
|
488
137
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
Member,
|
|
495
|
-
AccessControlAPIResponse,
|
|
496
|
-
} from "@itwin/access-control-client";
|
|
138
|
+
// Create a role
|
|
139
|
+
const newRole = await client.roles.createITwinRole(accessToken, iTwinId, {
|
|
140
|
+
displayName: "Project Manager",
|
|
141
|
+
description: "Role for project management"
|
|
142
|
+
});
|
|
497
143
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
}
|
|
144
|
+
// Query user members
|
|
145
|
+
const members = await client.userMembers.queryITwinUserMembers(
|
|
146
|
+
accessToken,
|
|
147
|
+
iTwinId,
|
|
148
|
+
{ top: 10 }
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
// Add user members
|
|
152
|
+
const addedMembers = await client.userMembers.addITwinUserMembers(
|
|
153
|
+
accessToken,
|
|
154
|
+
iTwinId,
|
|
155
|
+
[{
|
|
156
|
+
email: "user@example.com",
|
|
157
|
+
roleIds: ["role-id"]
|
|
158
|
+
}],
|
|
159
|
+
"Welcome message"
|
|
160
|
+
);
|
|
513
161
|
```
|
|
514
162
|
|
|
515
|
-
|
|
163
|
+
## About this Repository
|
|
516
164
|
|
|
517
|
-
|
|
518
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
519
|
-
import {
|
|
520
|
-
AccessControlClient,
|
|
521
|
-
IAccessControlClient,
|
|
522
|
-
Member,
|
|
523
|
-
AccessControlAPIResponse,
|
|
524
|
-
} from "@itwin/access-control-client";
|
|
165
|
+
The **@itwin/access-control-client** package provides a modern, type-safe interface to Bentley Systems' Access Control API. It manages iTwin access permissions, roles, groups, members, invitations, and sharing capabilities.
|
|
525
166
|
|
|
526
|
-
|
|
527
|
-
async function printiTwinGroupMemberIds(): Promise<void> {
|
|
528
|
-
const skipAmmount = 5;
|
|
529
|
-
const topAmount = 3;
|
|
530
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
531
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
532
|
-
|
|
533
|
-
const iTwinsResponse: AccessControlAPIResponse<GroupMember[]> =
|
|
534
|
-
await accessControlClient.groupMembers.queryITwinGroupMembersAsync(
|
|
535
|
-
accessToken,
|
|
536
|
-
"9bd7d24d-1508-4dba-99ab-23b3166401a0",
|
|
537
|
-
{ skip: skipAmmount, top: topAmount }
|
|
538
|
-
);
|
|
539
|
-
|
|
540
|
-
iTwinsResponse.data!.forEach((actualGroupMember: GroupMember) => {
|
|
541
|
-
console.log(actualGroupMember.id);
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
```
|
|
167
|
+
For more information about the iTwin platform and APIs, visit:
|
|
545
168
|
|
|
546
|
-
|
|
169
|
+
- [iTwin Developer Portal](https://developer.bentley.com/)
|
|
170
|
+
- [Access Control API Documentation](https://developer.bentley.com/apis/access-control/)
|
|
171
|
+
- [iTwin.js Platform](http://www.itwinjs.org)
|
|
547
172
|
|
|
548
|
-
|
|
549
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
550
|
-
import {
|
|
551
|
-
AccessControlClient,
|
|
552
|
-
IAccessControlClient,
|
|
553
|
-
Member,
|
|
554
|
-
AccessControlAPIResponse,
|
|
555
|
-
} from "@itwin/access-control-client";
|
|
173
|
+
## Development
|
|
556
174
|
|
|
557
|
-
|
|
558
|
-
async function printiTwinGroupMemberIds(): Promise<void> {
|
|
559
|
-
const accessControlClient: IAccessControlClient = new AccessControlClient();
|
|
560
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
561
|
-
|
|
562
|
-
const iTwinsResponse: AccessControlAPIResponse<GroupMember> =
|
|
563
|
-
await accessControlClient.groupMembers.getITwinGroupMemberAsync(
|
|
564
|
-
accessToken,
|
|
565
|
-
"9bd7d24d-1508-4dba-99ab-23b3166401a0",
|
|
566
|
-
"a083cc1c-f51a-4c52-8614-5774ab79eca1"
|
|
567
|
-
);
|
|
568
|
-
|
|
569
|
-
const actualGroupMember = iTwinsResponse.data!;
|
|
570
|
-
console.log(actualGroupMember.id, actualGroupMember.email);
|
|
571
|
-
}
|
|
572
|
-
```
|
|
175
|
+
### Prerequisites
|
|
573
176
|
|
|
574
|
-
|
|
177
|
+
- Node.js 16+ and pnpm
|
|
178
|
+
- TypeScript 4.5+
|
|
179
|
+
- Valid iTwin Platform credentials
|
|
575
180
|
|
|
576
|
-
|
|
577
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
578
|
-
import {
|
|
579
|
-
AccessControlClient,
|
|
580
|
-
IAccessControlClient,
|
|
581
|
-
Member,
|
|
582
|
-
AccessControlAPIResponse,
|
|
583
|
-
} from "@itwin/access-control-client";
|
|
181
|
+
### Building from Source
|
|
584
182
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
// Create user member
|
|
591
|
-
const createResponse: AccessControlAPIResponse<Role> =
|
|
592
|
-
await accessControlClient.groupMembers.addITwinGroupMembersAsync(
|
|
593
|
-
accessToken,
|
|
594
|
-
"71fd32ed-5ee4-4e22-bc4d-b8e973e0b7b7",
|
|
595
|
-
"d8215a6b-465d-44ff-910b-40d4541d1ebf"
|
|
596
|
-
);
|
|
597
|
-
|
|
598
|
-
// Update user member's role
|
|
599
|
-
const updatedGroupMemberResponse: AccessControlAPIResponse<GroupMember> =
|
|
600
|
-
await accessControlClient.groupMembers.updateITwinGroupMemberAsync(
|
|
601
|
-
accessToken,
|
|
602
|
-
"b1803a0c-d440-4902-b527-54bf7f72500f",
|
|
603
|
-
"6401109c-75d7-46b8-8dbd-182d02155141",
|
|
604
|
-
[
|
|
605
|
-
"25162c0c-dce7-419e-bb51-fd13efd5b54a",
|
|
606
|
-
"10e3d778-0d35-4c4d-bf77-547bb366cb14",
|
|
607
|
-
]
|
|
608
|
-
);
|
|
609
|
-
|
|
610
|
-
// Delete user member
|
|
611
|
-
const removeGroupMemberResponse: AccessControlAPIResponse<undefined> =
|
|
612
|
-
await accessControlClient.groupMembers.removeITwinGroupMemberAsync(
|
|
613
|
-
accessToken,
|
|
614
|
-
"b1803a0c-d440-4902-b527-54bf7f72500f",
|
|
615
|
-
"6401109c-75d7-46b8-8dbd-182d02155141"
|
|
616
|
-
);
|
|
617
|
-
}
|
|
183
|
+
```bash
|
|
184
|
+
git clone https://github.com/iTwin/access-control-client.git
|
|
185
|
+
cd access-control-client
|
|
186
|
+
pnpm install
|
|
187
|
+
pnpm build
|
|
618
188
|
```
|
|
619
189
|
|
|
620
|
-
###
|
|
190
|
+
### Running Tests
|
|
621
191
|
|
|
622
|
-
|
|
623
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
624
|
-
import {
|
|
625
|
-
AccessControlClient,
|
|
626
|
-
IAccessControlClient,
|
|
627
|
-
Permission,
|
|
628
|
-
AccessControlAPIResponse,
|
|
629
|
-
} from "@itwin/access-control-client";
|
|
192
|
+
.env file setup is required for tests. View [Getting Started](./GETTINGSTARTED.md) for more information.
|
|
630
193
|
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
194
|
+
```bash
|
|
195
|
+
# Run all tests
|
|
196
|
+
pnpm test
|
|
635
197
|
|
|
636
|
-
|
|
637
|
-
|
|
198
|
+
# Run tests with coverage
|
|
199
|
+
pnpm test:coverage
|
|
638
200
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
});
|
|
642
|
-
}
|
|
201
|
+
# Run linting
|
|
202
|
+
pnpm lint
|
|
643
203
|
```
|
|
644
204
|
|
|
645
|
-
|
|
205
|
+
## Contributing
|
|
646
206
|
|
|
647
|
-
|
|
648
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
649
|
-
import {
|
|
650
|
-
AccessControlClient,
|
|
651
|
-
IAccessControlClient,
|
|
652
|
-
Permission,
|
|
653
|
-
AccessControlAPIResponse,
|
|
654
|
-
} from "@itwin/access-control-client";
|
|
207
|
+
We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details on:
|
|
655
208
|
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
const iTwinsResponse: AccessControlAPIResponse<Permission[]> =
|
|
662
|
-
await accessControlClient.permissions.getITwinPermissionsAsync(
|
|
663
|
-
accessToken,
|
|
664
|
-
"6c704296-9028-4a1e-ae67-c0104a11402a"
|
|
665
|
-
);
|
|
666
|
-
|
|
667
|
-
iTwinsResponse.data!.forEach((actualPermission: Permission) => {
|
|
668
|
-
console.log(actualPermission.id);
|
|
669
|
-
});
|
|
670
|
-
}
|
|
671
|
-
```
|
|
209
|
+
- How to submit issues and feature requests
|
|
210
|
+
- Development workflow and coding standards
|
|
211
|
+
- Pull request process and review guidelines
|
|
212
|
+
- Testing requirements and conventions
|
|
213
|
+
- How to use changesets for versioning
|
|
672
214
|
|
|
673
|
-
###
|
|
215
|
+
### Versioning
|
|
674
216
|
|
|
675
|
-
|
|
676
|
-
import type { AccessToken } from "@itwin/core-bentley";
|
|
677
|
-
import {
|
|
678
|
-
AccessControlClient,
|
|
679
|
-
IAccessControlClient,
|
|
680
|
-
ITwinJob,
|
|
681
|
-
ITwinJobActions,
|
|
682
|
-
AccessControlAPIResponse,
|
|
683
|
-
} from "@itwin/access-control-client";
|
|
217
|
+
This project uses [Changesets](https://github.com/changesets/changesets) for version management. For more information view [Contributing Guide](./CONTRIBUTING.md).
|
|
684
218
|
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
const accessToken: AccessToken = { get_access_token_logic_here };
|
|
689
|
-
|
|
690
|
-
const itwinJobActions = {
|
|
691
|
-
assignRoles: [
|
|
692
|
-
{
|
|
693
|
-
email: "John.Johnson@example.com",
|
|
694
|
-
roleIds: ["65819672-962d-4386-8667-136125bcb7b2"],
|
|
695
|
-
},
|
|
696
|
-
],
|
|
697
|
-
unassignRoles: [
|
|
698
|
-
{
|
|
699
|
-
email: "Maria.Miller@example.com",
|
|
700
|
-
roleIds: ["d6a62e34-5016-4bac-a9a0-a6522583698e"],
|
|
701
|
-
},
|
|
702
|
-
],
|
|
703
|
-
removeMembers: [
|
|
704
|
-
{
|
|
705
|
-
email: "Jobby.McJobface@example.com",
|
|
706
|
-
},
|
|
707
|
-
],
|
|
708
|
-
};
|
|
709
|
-
|
|
710
|
-
// Create iTwin job
|
|
711
|
-
const createResponse: AccessControlAPIResponse<ITwinJob> =
|
|
712
|
-
await accessControlClient.itwinJobs.createITwinJobAsync(
|
|
713
|
-
accessToken,
|
|
714
|
-
"d7d82799-3f0c-4175-acbe-cc2573e99359",
|
|
715
|
-
itwinJobActions
|
|
716
|
-
);
|
|
717
|
-
|
|
718
|
-
// Get the created iTwin job
|
|
719
|
-
const getiTwinJobResponse: AccessControlAPIResponse<ITwinJob> =
|
|
720
|
-
await accessControlClient.itwinJobs.getITwinJobAsync(
|
|
721
|
-
accessToken,
|
|
722
|
-
"d7d82799-3f0c-4175-acbe-cc2573e99359",
|
|
723
|
-
createResponse.data.id
|
|
724
|
-
);
|
|
725
|
-
|
|
726
|
-
// Get the created iTwin job with errors
|
|
727
|
-
const getiTwinJobResponseWithErrors: AccessControlAPIResponse<ITwinJob> =
|
|
728
|
-
await accessControlClient.itwinJobs.getITwinJobAsync(
|
|
729
|
-
accessToken,
|
|
730
|
-
"d7d82799-3f0c-4175-acbe-cc2573e99359",
|
|
731
|
-
createResponse.data.id,
|
|
732
|
-
"representation"
|
|
733
|
-
);
|
|
734
|
-
|
|
735
|
-
// Get the created iTwin job's actions
|
|
736
|
-
const getiTwinJobActionaResponse: AccessControlAPIResponse<ITwinJobActions> =
|
|
737
|
-
await accessControlClient.itwinJobs.getITwinJobActionsAsync(
|
|
738
|
-
accessToken,
|
|
739
|
-
"d7d82799-3f0c-4175-acbe-cc2573e99359",
|
|
740
|
-
createResponse.data.id
|
|
741
|
-
);
|
|
742
|
-
}
|
|
743
|
-
```
|
|
219
|
+
## License
|
|
220
|
+
|
|
221
|
+
Copyright © Bentley Systems, Incorporated. All rights reserved.
|
|
744
222
|
|
|
745
|
-
|
|
223
|
+
This project is licensed under the MIT License - see the [LICENSE.md](./LICENSE.md) file for details.
|
|
746
224
|
|
|
747
|
-
|
|
225
|
+
---
|