Erişim Denetimi Kalıpları
`Ownable`, `Pausable` ve role dayalı erişim denetimi (RBAC) kalıplarını kullanarak sağlam erişim denetimi mekanizmaları uygulayın.
Erişim Denetimi Kalıpları, CoddyKit'te ücretsiz bir Blockchain Smart Contracts with Solidity dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Blockchain Smart Contracts with Solidity öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Blockchain Smart Contracts with Solidity kursu toplamda 4 dersten oluşur.
Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.
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.
Sıkça Sorulan Sorular
“Erişim Denetimi Kalıpları” dersi ücretsiz mi?
Evet — “Erişim Denetimi Kalıpları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Blockchain Smart Contracts with Solidity kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Blockchain Smart Contracts with Solidity kursu toplamda 4 dersten oluşur.
“Erişim Denetimi Kalıpları” dersinde ne öğreneceğim?
`Ownable`, `Pausable` ve role dayalı erişim denetimi (RBAC) kalıplarını kullanarak sağlam erişim denetimi mekanizmaları uygulayın. Blockchain Smart Contracts with Solidity ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Blockchain Smart Contracts with Solidity öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Blockchain Smart Contracts with Solidity, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Erişim Denetimi Kalıpları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Blockchain Smart Contracts with Solidity dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Blockchain Smart Contracts with Solidity dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Yaygın Güvenlik Açıkları (Yeniden Giriş vb.)
- Erişim Denetimi Kalıpları
- SafeMath ile Güvenli Kodlama
- Denetim, Test ve Hata Ödülleri