[PERS SDK - v2.3.26](/sdk-reference/readme) / [Exports](/sdk-reference/modules) / BusinessMembershipService

# Class: BusinessMembershipService

Business Membership Service

Platform-agnostic service for managing business memberships.
Provides business logic layer on top of the API client with
convenience methods and role-based utilities.

**`Example`**

```typescript
const service = new BusinessMembershipService(membershipApi);

// Get members with admin permissions
const admins = await service.getMembersByRole('business-123', MembershipRole.ADMIN);

// Check permissions
const canManage = service.canManageMembers(MembershipRole.ADMIN); // true
```

**`Version`**

2.0.0

## Table of contents

### Constructors

- [constructor](/sdk-reference/classes/businessmembershipservice#constructor)


### Methods

- [getMembers](/sdk-reference/classes/businessmembershipservice#getmembers)
- [getMembersByRole](/sdk-reference/classes/businessmembershipservice#getmembersbyrole)
- [getMembersWithMinRole](/sdk-reference/classes/businessmembershipservice#getmemberswithminrole)
- [getMemberByUserId](/sdk-reference/classes/businessmembershipservice#getmemberbyuserid)
- [getMemberCountsByRole](/sdk-reference/classes/businessmembershipservice#getmembercountsbyrole)
- [addMember](/sdk-reference/classes/businessmembershipservice#addmember)
- [updateMemberRole](/sdk-reference/classes/businessmembershipservice#updatememberrole)
- [removeMember](/sdk-reference/classes/businessmembershipservice#removemember)
- [promoteMember](/sdk-reference/classes/businessmembershipservice#promotemember)
- [demoteMember](/sdk-reference/classes/businessmembershipservice#demotemember)
- [canViewMembers](/sdk-reference/classes/businessmembershipservice#canviewmembers)
- [canManageMembers](/sdk-reference/classes/businessmembershipservice#canmanagemembers)
- [canEditContent](/sdk-reference/classes/businessmembershipservice#caneditcontent)
- [canDeleteBusiness](/sdk-reference/classes/businessmembershipservice#candeletebusiness)
- [getPermissions](/sdk-reference/classes/businessmembershipservice#getpermissions)
- [canAssignRole](/sdk-reference/classes/businessmembershipservice#canassignrole)


## Constructors

### constructor

• **new BusinessMembershipService**(`membershipApi`): [`BusinessMembershipService`](/sdk-reference/classes/businessmembershipservice)

#### Parameters

| Name | Type |
|  --- | --- |
| `membershipApi` | [`BusinessMembershipApi`](/sdk-reference/classes/businessmembershipapi) |


#### Returns

[`BusinessMembershipService`](/sdk-reference/classes/businessmembershipservice)

#### Defined in

[business/services/business-membership-service.ts:31](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L31)

## Methods

### getMembers

▸ **getMembers**(`businessId`, `options?`): `Promise`<`PaginatedResponseDTO`<`BusinessMembershipDTO`>>

Get all members of a business with pagination

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `businessId` | `string` | The business UUID |
| `options?` | [`GetBusinessMembersOptions`](/sdk-reference/interfaces/getbusinessmembersoptions) | Pagination and include options |


#### Returns

`Promise`<`PaginatedResponseDTO`<`BusinessMembershipDTO`>>

Paginated response with business memberships

**`Example`**

```typescript
// Get members with user data for display
const members = await service.getMembers('biz-123', { include: ['user'] });
members.data.forEach(m => console.log(m.included?.user?.email));
```

#### Defined in

[business/services/business-membership-service.ts:51](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L51)

### getMembersByRole

▸ **getMembersByRole**(`businessId`, `role`, `options?`): `Promise`<`PaginatedResponseDTO`<`BusinessMembershipDTO`>>

Get members filtered by role (client-side filtering)

#### Parameters

| Name | Type |
|  --- | --- |
| `businessId` | `string` |
| `role` | `MembershipRole` |
| `options?` | `PaginationOptions` |


#### Returns

`Promise`<`PaginatedResponseDTO`<`BusinessMembershipDTO`>>

**`Deprecated`**

Consider server-side role filtering for better performance

#### Defined in

[business/services/business-membership-service.ts:59](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L59)

### getMembersWithMinRole

▸ **getMembersWithMinRole**(`businessId`, `minRole`): `Promise`<`BusinessMembershipDTO`[]>

Get members with at least a minimum role level

Uses the role hierarchy: OWNER > ADMIN > EDITOR > VIEWER

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `businessId` | `string` | The business UUID |
| `minRole` | `MembershipRole` | The minimum role level |


#### Returns

`Promise`<`BusinessMembershipDTO`[]>

Array of memberships with role >= minRole

**`Example`**

```typescript
// Get all members who can manage content (EDITOR and above)
const editors = await service.getMembersWithMinRole('biz-123', MembershipRole.EDITOR);
```

#### Defined in

[business/services/business-membership-service.ts:91](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L91)

### getMemberByUserId

▸ **getMemberByUserId**(`businessId`, `userId`): `Promise`<`undefined` | `BusinessMembershipDTO`>

Get a specific member by user ID

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `businessId` | `string` | The business UUID |
| `userId` | `string` | The user UUID to find |


#### Returns

`Promise`<`undefined` | `BusinessMembershipDTO`>

The membership if found, undefined otherwise

#### Defined in

[business/services/business-membership-service.ts:106](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L106)

### getMemberCountsByRole

▸ **getMemberCountsByRole**(`businessId`): `Promise`<`Record`<`MembershipRole`, `number`>>

Count members by role

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `businessId` | `string` | The business UUID |


#### Returns

`Promise`<`Record`<`MembershipRole`, `number`>>

Object with count per role

**`Example`**

```typescript
const counts = await service.getMemberCountsByRole('biz-123');
// { OWNER: 1, ADMIN: 2, EDITOR: 5, VIEWER: 10 }
```

#### Defined in

[business/services/business-membership-service.ts:126](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L126)

### addMember

▸ **addMember**(`businessId`, `userId`, `role?`): `Promise`<`BusinessMembershipDTO`>

Add a new member to a business

#### Parameters

| Name | Type | Default value | Description |
|  --- | --- | --- | --- |
| `businessId` | `string` | `undefined` | The business UUID |
| `userId` | `string` | `undefined` | The user UUID to add |
| `role` | `MembershipRole` | `MembershipRole.VIEWER` | The role to assign (defaults to VIEWER) |


#### Returns

`Promise`<`BusinessMembershipDTO`>

The created membership

#### Defined in

[business/services/business-membership-service.ts:159](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L159)

### updateMemberRole

▸ **updateMemberRole**(`businessId`, `userId`, `newRole`): `Promise`<`BusinessMembershipDTO`>

Update a member's role

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `businessId` | `string` | The business UUID |
| `userId` | `string` | The user UUID to update |
| `newRole` | `MembershipRole` | The new role to assign |


#### Returns

`Promise`<`BusinessMembershipDTO`>

The updated membership

#### Defined in

[business/services/business-membership-service.ts:175](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L175)

### removeMember

▸ **removeMember**(`businessId`, `userId`): `Promise`<{ `success`: `boolean`  }>

Remove a member from a business

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `businessId` | `string` | The business UUID |
| `userId` | `string` | The user UUID to remove |


#### Returns

`Promise`<{ `success`: `boolean`  }>

Success confirmation

#### Defined in

[business/services/business-membership-service.ts:190](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L190)

### promoteMember

▸ **promoteMember**(`businessId`, `userId`, `targetRole`): `Promise`<`BusinessMembershipDTO`>

Promote a member to a higher role

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `businessId` | `string` | The business UUID |
| `userId` | `string` | The user UUID to promote |
| `targetRole` | `MembershipRole` | The target role (must be higher than current) |


#### Returns

`Promise`<`BusinessMembershipDTO`>

The updated membership

**`Throws`**

Error if target role is not higher than current

#### Defined in

[business/services/business-membership-service.ts:206](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L206)

### demoteMember

▸ **demoteMember**(`businessId`, `userId`, `targetRole`): `Promise`<`BusinessMembershipDTO`>

Demote a member to a lower role

Note: Cannot demote the last OWNER

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `businessId` | `string` | The business UUID |
| `userId` | `string` | The user UUID to demote |
| `targetRole` | `MembershipRole` | The target role (must be lower than current) |


#### Returns

`Promise`<`BusinessMembershipDTO`>

The updated membership

**`Throws`**

Error if target role is not lower than current

#### Defined in

[business/services/business-membership-service.ts:236](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L236)

### canViewMembers

▸ **canViewMembers**(`role`): `boolean`

Check if a role can view members (any member)

#### Parameters

| Name | Type |
|  --- | --- |
| `role` | `null` | `MembershipRole` |


#### Returns

`boolean`

#### Defined in

[business/services/business-membership-service.ts:262](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L262)

### canManageMembers

▸ **canManageMembers**(`role`): `boolean`

Check if a role can manage members (ADMIN or higher)

#### Parameters

| Name | Type |
|  --- | --- |
| `role` | `null` | `MembershipRole` |


#### Returns

`boolean`

#### Defined in

[business/services/business-membership-service.ts:269](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L269)

### canEditContent

▸ **canEditContent**(`role`): `boolean`

Check if a role can edit content (EDITOR or higher)

#### Parameters

| Name | Type |
|  --- | --- |
| `role` | `null` | `MembershipRole` |


#### Returns

`boolean`

#### Defined in

[business/services/business-membership-service.ts:276](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L276)

### canDeleteBusiness

▸ **canDeleteBusiness**(`role`): `boolean`

Check if a role can delete the business (OWNER only)

#### Parameters

| Name | Type |
|  --- | --- |
| `role` | `null` | `MembershipRole` |


#### Returns

`boolean`

#### Defined in

[business/services/business-membership-service.ts:283](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L283)

### getPermissions

▸ **getPermissions**(`role`): `Object`

Get permissions object for a role

Useful for UI components to conditionally render based on permissions.

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `role` | `null` | `MembershipRole` | The membership role (or null if not a member) |


#### Returns

`Object`

Object with boolean permission flags

| Name | Type |
|  --- | --- |
| `canViewMembers` | `boolean` |
| `canManageMembers` | `boolean` |
| `canEditContent` | `boolean` |
| `canDeleteBusiness` | `boolean` |


**`Example`**

```typescript
const perms = service.getPermissions(MembershipRole.EDITOR);
// { canViewMembers: true, canManageMembers: false, canEditContent: true, canDeleteBusiness: false }

if (perms.canManageMembers) {
  showAddMemberButton();
}
```

#### Defined in

[business/services/business-membership-service.ts:305](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L305)

### canAssignRole

▸ **canAssignRole**(`assignerRole`, `targetRole`): `boolean`

Check if a role can assign another role

Rule: Can only assign roles up to your own level
(ADMIN cannot create OWNER, but OWNER can create anything)

#### Parameters

| Name | Type | Description |
|  --- | --- | --- |
| `assignerRole` | `MembershipRole` | The role of the user assigning |
| `targetRole` | `MembershipRole` | The role being assigned |


#### Returns

`boolean`

true if the assigner can assign the target role

#### Defined in

[business/services/business-membership-service.ts:329](https://github.com/eXplorins/PERS-sdks/blob/main/packages/pers-sdk/packages/pers-sdk/src/business/services/business-membership-service.ts#L329)