# TeamControlled

[Git Source](https://github.com/EntreDevelopers-Lab-Inc/Mezz-Companies/blob/f7a3e84e3dd5bb33c4bd7f77283983f9e8ba20b2/src/core/base/TeamControlled.sol)

**Inherits:** Initializable, ContextUpgradeable, ITeamControlled

**Author:** Daniel Yamagata & Jerry Qi & Naveen Ailawadi

A base contract whose inheritors can enforce ownership-like access control. This access control is non-transferrable and cannot be renounced.

## State Variables

### TeamControlledStorageLocation

```solidity
bytes32 private constant TeamControlledStorageLocation =
    0xb816793abbf480753098fb767c6f1dcec3044cd562367c4739d88482505d6d00;
```

## Functions

### \_getTeamControlledStorage

```solidity
function _getTeamControlledStorage() internal pure returns (TeamControlledStorage storage $);
```

### onlyTeam

*Reverts if the caller is not the 'team'*

```solidity
modifier onlyTeam();
```

### onlyTeamOrAncestor

*Reverts if the caller is not the 'team' or its ancestor*

```solidity
modifier onlyTeamOrAncestor();
```

### \_\_TeamControlled\_init

*Sets the '\_team' variable and validate that it supports the ITeam interface*

```solidity
function __TeamControlled_init(address initTeam) internal virtual onlyInitializing;
```

### team

Returns the address of the team, which act similar to an 'owner' of the contract

```solidity
function team() public view virtual returns (address);
```

### \_isCallerTeam

```solidity
function _isCallerTeam() internal view returns (bool);
```

### \_validateCallerIsTeam

*Reverts if the caller is not the 'team'*

```solidity
function _validateCallerIsTeam() internal view;
```

### \_validateCallerIsTeamOrAncestor

*Reverts if the caller is not the 'team' or an ancestor of the 'team'*

```solidity
function _validateCallerIsTeamOrAncestor() internal view;
```

## Structs

### TeamControlledStorage

```solidity
struct TeamControlledStorage {
    address _team;
}
```
