Kawalan Capaian
Ownable dan Roles
Kawalan Capaian ialah pelajaran Asas Pembangunan Web3 & DApp percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Pembangunan Web3 & DApp, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Mengapa Kawalan Akses
Banyak fungsi kontrak sepatutnya hanya boleh dipanggil oleh akaun tertentu — mencetak token, menjeda sistem dan mengeluarkan dana. Kawalan akses menguatkuasakan pihak yang boleh melakukan setiap tindakan.
OpenZeppelin menawarkan dua corak utama: Ownable dan AccessControl.
Corak Ownable
Ownable memberikan kontrak satu owner yang mempunyai keistimewaan. Import dan warisinya:
import "@openzeppelin/contracts/access/Ownable.sol";
contract Vault is Ownable {
constructor() Ownable(msg.sender) {}
}Pihak yang menggunakan kontrak menjadi pemilik awal.
import "@openzeppelin/contracts/access/Ownable.sol";
contract Vault is Ownable {
constructor() Ownable(msg.sender) {}
}Pengubah onlyOwner
Hadkan fungsi kepada pemilik dengan pengubah onlyOwner:
function withdraw() public onlyOwner {
payable(owner()).transfer(address(this).balance);
}Jika pihak lain memanggilnya, transaksi akan dibatalkan secara automatik.
function withdraw() public onlyOwner {
payable(owner()).transfer(address(this).balance);
}Memindahkan Pemilikan
Ownable membolehkan Anda menyerahkan kawalan kepada alamat lain:
// Give ownership to a new account
vault.transferOwnership(newOwner);
// Or give it up forever
vault.renounceOwnership();Melepaskan pemilikan menjadikan fungsi onlyOwner tidak boleh dipanggil selama-lamanya — gunakannya dengan berhati-hati.
// Give ownership to a new account
vault.transferOwnership(newOwner);
// Or give it up forever
vault.renounceOwnership();Had Pemilik Tunggal
Seorang pemilik memang ringkas tetapi mempunyai batasan:
- Tiada cara untuk memberikan kebenaran berbeza kepada orang yang berbeza.
- Satu kunci ialah satu titik kegagalan.
Untuk persediaan yang lebih kaya, gunakan kawalan akses berasaskan peranan.
Corak AccessControl
AccessControl menyokong banyak peranan bernama. Warisinya dan takrifkan peranan Anda:
import "@openzeppelin/contracts/access/AccessControl.sol";
contract Token is AccessControl {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
}Peranan dikenal pasti melalui nama yang dicincang.
import "@openzeppelin/contracts/access/AccessControl.sol";
contract Token is AccessControl {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
}Memberikan Peranan
Pihak yang menggunakan kontrak biasanya menerima peranan pentadbir, kemudian memberikan peranan kepada pihak lain:
constructor() {
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(MINTER_ROLE, msg.sender);
}DEFAULT_ADMIN_ROLE boleh memberikan dan menarik balik semua peranan lain.
constructor() {
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(MINTER_ROLE, msg.sender);
}Pengubah onlyRole
Hadkan fungsi kepada pemegang sesuatu peranan:
function mint(address to, uint256 amount)
public onlyRole(MINTER_ROLE) {
_mint(to, amount);
}Hanya akaun yang diberikan MINTER_ROLE boleh mencetak token; akaun lain akan menyebabkan transaksi dibatalkan.
function mint(address to, uint256 amount)
public onlyRole(MINTER_ROLE) {
_mint(to, amount);
}Mengurus Peranan Semasa Pelaksanaan
Pentadbir boleh memberikan dan menarik balik peranan selepas penggunaan:
token.grantRole(MINTER_ROLE, alice);
token.revokeRole(MINTER_ROLE, alice);
// Check membership
bool canMint = await token.hasRole(MINTER_ROLE, alice);Sesuatu akaun juga boleh melepaskan peranannya sendiri.
token.grantRole(MINTER_ROLE, alice);
token.revokeRole(MINTER_ROLE, alice);
// Check membership
bool canMint = await token.hasRole(MINTER_ROLE, alice);Memilih Corak
Yang manakah patut digunakan?
- Ownable — tugas pentadbiran yang ringkas, seorang pengendali yang dipercayai.
- AccessControl — banyak peranan, pengasingan tugas dan organisasi autonomi teragih.
Untuk pengeluaran, pertimbangkan untuk memberikan peranan pemilik atau pentadbir kepada multisig dan bukannya satu kunci.
Setiap Peranan Mempunyai Pentadbir
Dalam AccessControl, setiap peranan mempunyai peranan pentadbir yang mengawal pihak yang boleh memberikan atau menarik baliknya. Secara lalai, peranan itu ialah DEFAULT_ADMIN_ROLE, tetapi Anda boleh mengubahnya:
// Make MANAGER_ROLE the admin of MINTER_ROLE
_setRoleAdmin(MINTER_ROLE, MANAGER_ROLE);Ini membolehkan Anda membina hierarki kebenaran.
// Make MANAGER_ROLE the admin of MINTER_ROLE
_setRoleAdmin(MINTER_ROLE, MANAGER_ROLE);Semakan Pantas
Uji pemahaman Anda tentang kawalan akses.
Rumusan
Anda telah belajar corak kawalan akses OpenZeppelin.
- Ownable memberikan satu
owner; hadkan denganonlyOwnerdan pindahkan atau lepaskan pemilikan. - AccessControl menyokong banyak peranan yang dikenal pasti melalui nama yang dicincang.
- Berikan peranan pentadbir semasa penggunaan; lindungi fungsi dengan
onlyRole. - Pentadbir memberikan atau menarik balik peranan semasa pelaksanaan; akaun boleh melepaskan peranan.
- Gunakan Ownable untuk kes ringkas dan AccessControl (sebaik-baiknya di sebalik multisig) untuk kes kompleks.
Pelajari Asas Pembangunan Web3 & DApp dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 29
- Pelajaran
- 105
Soalan Lazim
Adakah pelajaran “Kawalan Capaian” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Pembangunan Web3 & DApp, termasuk “Kawalan Capaian”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Pembangunan Web3 & DApp merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Kawalan Capaian”?
Ownable dan Roles Anda berlatih Asas Pembangunan Web3 & DApp menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Asas Pembangunan Web3 & DApp?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Pembangunan Web3 & DApp di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Kawalan Capaian” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Pembangunan Web3 & DApp ini?
Ya. Setiap pelajaran Asas Pembangunan Web3 & DApp menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.