# 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;
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mezzanine.xyz/smart-contracts/source-code/core/base/teamcontrolled.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
