問題一覧に戻る
上級セキュリティパターン
問題77: アクセス制御

Solidityのアクセス制御パターンを学習します - コントラクトセキュリティの基礎です。Ownableパターンは重要な関数を単一のオーナーアドレスに制限します。ロールベースアクセス制御(RBAC)は複雑なシステムに柔軟な権限を提供します。修飾子がこれらの制限を一貫して実施します。適切なアクセス制御は不正なアクションを防ぎ、管理機能を保護し、ガバナンスを可能にします。イベントは透明性のため権限変更を記録します。安全なDeFiプロトコル構築に不可欠です。

pragma solidity ^0.8.0;

contract AccessControl {
address public owner;
mapping(address => bool) public admins;

// 透明性のためのイベント
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

modifier {
require(msg.sender == owner, "Not owner");
_;
}

modifier onlyAdmin() {
require(admins[msg.sender] || msg.sender == owner, "Not admin");
_;
}

constructor() {
owner = ;
}

// 安全に所有権を移転
function transferOwnership(address newOwner) public {
require(newOwner != address(0), "Invalid address");
address oldOwner = owner;
owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}

// ロールベースの権限
function setAdmin(address admin, bool status) public onlyOwner {
admins[admin] = status;
}
}