Modèles de contrôle d’accès
Mettez en œuvre des mécanismes robustes de contrôle d’accès à l’aide des modèles `Ownable`, `Pausable` et de contrôle d’accès fondé sur les rôles (RBAC).
Modèles de contrôle d’accès est une leçon Blockchain Smart Contracts with Solidity gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Blockchain Smart Contracts with Solidity, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Blockchain Smart Contracts with Solidity comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
What is Access Control?
In smart contracts, access control defines who can perform specific actions. It's like setting permissions on a file or folder.
Without proper access control, anyone could call sensitive functions, leading to vulnerabilities or unintended behavior.
Why It's Crucial
Imagine a contract that manages funds or critical system settings. You wouldn't want just anyone to be able to:
- Withdraw all funds.
- Change the contract's owner.
- Pause essential operations.
Access control is a fundamental security measure.
The `onlyOwner` Modifier
A common pattern is to restrict certain functions to the contract's owner (the address that deployed it).
This is often achieved using a modifier, a special keyword in Solidity that can alter the behavior of a function.
Custom `onlyOwner` Example
Here's how you might manually implement an onlyOwner modifier and use it:
pragma solidity ^0.8.0;
contract MyBasicOwnable {
address public owner;
constructor() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
function setGreeting(string memory _text) public onlyOwner {
// Only the owner can call this
// ... (e.g., update a greeting message)
}
}OpenZeppelin's `Ownable`
While you can write your own, it's best practice to use battle-tested libraries. OpenZeppelin provides a secure and standardized Ownable contract.
By inheriting from Ownable, your contract gets the owner state variable and the onlyOwner modifier automatically.
Using OpenZeppelin `Ownable`
Simply import and inherit Ownable. The contract deployer automatically becomes the owner.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyOzOwnable is Ownable {
uint256 public value;
function setValue(uint256 _newValue) public onlyOwner {
value = _newValue;
}
function getValue() public view returns (uint256) {
return value;
}
}The `Pausable` Pattern
The Pausable pattern allows a contract to be put into a 'paused' state, preventing certain functions from being called.
This is crucial for emergency situations, like discovering a critical bug or reacting to a hack, giving developers time to mitigate issues.
Using OpenZeppelin `Pausable`
OpenZeppelin's Pausable provides paused state, whenNotPaused and whenPaused modifiers, and _pause()/_unpause() functions.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyPausableContract is Pausable, Ownable {
uint256 public counter;
function increment() public whenNotPaused {
counter++;
}
function pauseContract() public onlyOwner {
_pause(); // Only owner can pause
}
function unpauseContract() public onlyOwner {
_unpause(); // Only owner can unpause
}
}Role-Based Access Control (RBAC)
For more complex contracts, a single 'owner' might not be enough. Role-Based Access Control (RBAC) allows defining multiple roles (e.g., 'minter', 'admin', 'pauser').
OpenZeppelin's AccessControl contract helps manage these roles efficiently.
Using OpenZeppelin `AccessControl`
Define roles as bytes32 constants. The deployer automatically gets DEFAULT_ADMIN_ROLE, which can grant/revoke other roles.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/AccessControl.sol";
contract MyRBACContract is AccessControl {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");
constructor() {
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(MINTER_ROLE, msg.sender); // Deployer is also a minter
}
function mint(address to, uint256 amount) public onlyRole(MINTER_ROLE) {
// Logic to mint tokens
}
function systemPause() public onlyRole(PAUSER_ROLE) {
// Logic to pause critical system functions
}
}Access Control Check
Which of the following are benefits of implementing access control patterns like Ownable, Pausable, or AccessControl in smart contracts?
Recap: Access Control Patterns
You've learned about essential access control patterns in Solidity:
Ownable: Restricts functions to a single owner, often the contract deployer.Pausable: Allows for emergency pausing/unpausing of contract functionality.AccessControl(RBAC): Provides flexible, role-based permissions for more complex scenarios.
These patterns are critical for building robust and secure smart contracts, often leveraged from OpenZeppelin's battle-tested libraries.
Questions Fréquemment Posées
La leçon « Modèles de contrôle d’accès » est-elle gratuite ?
Oui — le texte complet de « Modèles de contrôle d’accès » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Blockchain Smart Contracts with Solidity, passe à CoddyKit PRO. Le cours Blockchain Smart Contracts with Solidity comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Modèles de contrôle d’accès » ?
Mettez en œuvre des mécanismes robustes de contrôle d’accès à l’aide des modèles `Ownable`, `Pausable` et de contrôle d’accès fondé sur les rôles (RBAC). Tu pratiques Blockchain Smart Contracts with Solidity avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Blockchain Smart Contracts with Solidity ?
Aucune expérience préalable n'est requise. Blockchain Smart Contracts with Solidity sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Modèles de contrôle d’accès » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Blockchain Smart Contracts with Solidity ?
Oui. Chaque leçon Blockchain Smart Contracts with Solidity inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Vulnérabilités courantes (réentrance, etc.)
- Modèles de contrôle d’accès
- Programmation sécurisée avec SafeMath
- Audit, tests et primes de découverte de bogues