Untitled
unknown
plain_text
4 years ago
2.2 kB
20
Indexable
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract manageAuth{
/*
ابنجا با مپینگ آدرس هایی که میتونن بخونن رو مشخص کردیم .بصورت دیفالت فالس هست .
اما میتونیم یه فانکشن بنویسیم که فقط ادمین اجازه بده آدرس افراد داخل این مپینگ تروو بشن
*/
mapping(address => bool) public canRead;
/*
اینجا هم مادیفایر نوشتیم که قبل از اجرا شدن فانکشن شرط ما اجرا بشه.
اگر شرط ما اکی بود، وارد فانکشن میشیم
*/
modifier onlyCanRead{
require(canRead[msg.sender]== true, "you cann ot read");
_;
}
}
//ارث برای از کنتراکت بالایی و قابل استفاده شدن تمام استیت ها و فانکشن هایی که پرایویت نیستن !
contract Foo is manageAuth {
address public owner;
constructor (){
owner = msg.sender;
}
//دیتا استراکچر فرد
struct person{
string name;
}
//مپ برای ذخیره افراد از روی آدرس
mapping (address => person) public people;
//ساخت شخص
function createP(string memory _name) public {
//ساخت فرد بدون استفاده از مموری یا استوریج - بصورت دیفالت استراکت استوریج هست اما داخل فانکشن میشه مموری هم گذاشت
people[msg.sender].name = _name;
}
//خواندن افراد با استفاده از آدرس - فقط افرادی که در کنتراکت اولیه اجازه دارن
function readP() public view onlyCanRead returns(string memory){
return people[msg.sender].name;
}
//ادمین فقط میتونه این فانکشن صدا بزنه و آدرس افراد رو داخل فانکشن کنتراکت اولی ترووو کنه تا بتونن بخونن
function setAdd(address _address) public{
require(msg.sender == owner);
canRead[_address] = true;
}
}Editor is loading...