Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
2.2 kB
13
Indexable
Never
// 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;
    }

}