pragma solidity ^0.5.0; pragma experimental ABIEncoderV2; import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/access/Roles.sol"; contract HealthCare { using Roles for Roles.Role; Roles.Role private superAdmins; Roles.Role private hospitalAdmins; Roles.Role private receptionist; Roles.Role private doctor; Roles.Role private patient; Roles.Role private pharmacist; Roles.Role private radiologist; Roles.Role private pathologist; constructor() public { superAdmins.add(msg.sender); } //StructureOfPatient'sRecord struct patientRecords{ address patient; string fname; string lname; uint age; string[] ipfs; } mapping(address=>patientRecords) patientDetails; address[] public patientAccounts; //inputtingBasicData(name,age) function addPatientDetails(address _patientAddress,string calldata _fname,string calldata _lname,uint _age) external onlyReceptionist(){ patientDetails[_patientAddress].fname = _fname; patientDetails[_patientAddress].lname = _lname; patientDetails[_patientAddress].age = _age; patientAccounts.push(_patientAddress)-1; } //pathologist's work function pushIPFSbyPathologist(address _patientAddress,string calldata _hash) external onlyPathologist(){ patientDetails[_patientAddress].ipfs.push(_hash); } //pharmascist's work function pushIPFSbyPharmacist(address _patientAddress,string calldata _hash) external onlyPharmacist(){ patientDetails[_patientAddress].ipfs.push(_hash); } //radiologist's work function pushIPFSbyRadiologist(address _patientAddress,string calldata _hash) external onlyRadiologist(){ patientDetails[_patientAddress].ipfs.push(_hash); } //fetchingDetails function displayAllPatientAccounts() external view returns(address[] memory) { return patientAccounts; } function displayPatientDetails(address __patientAddress) external view returns (string memory, string memory, uint, string[] memory){ return (patientDetails[__patientAddress].fname, patientDetails[__patientAddress].lname, patientDetails[__patientAddress].age, patientDetails[__patientAddress].ipfs); } //addNetworkMembers function addHospitalAdmins(address _newHospitalAdmin) external onlysuperAdmin(){ hospitalAdmins.add(_newHospitalAdmin); } function addReceptionist(address _newDoctor) external onlyHospitalAdmins(){ receptionist.add(_newDoctor); } function addPatient(address _newPatient) external onlyReceptionist(){ patient.add(_newPatient); } function addDoctor(address _newDoctor) external onlyHospitalAdmins(){ doctor.add(_newDoctor); } function addPharmacist(address _newPharmacist) external onlyHospitalAdmins(){ pharmacist.add(_newPharmacist); } function addRadiologist(address _newRadiologist) external onlyHospitalAdmins(){ radiologist.add(_newRadiologist); } function addPathologist(address _newPathologist) external onlyHospitalAdmins(){ pathologist.add(_newPathologist); } //removeNetworkMembers function removeHospitalAdmins(address _oldHospitalAdmin) external onlysuperAdmin(){ hospitalAdmins.remove(_oldHospitalAdmin); } function removeReceptionist(address _oldDoctor) external onlyHospitalAdmins(){ receptionist.remove(_oldDoctor); } function removePatient(address _oldPatient) external onlyReceptionist(){ patient.remove(_oldPatient); } function removeDoctor(address _oldDoctor) external onlyHospitalAdmins(){ doctor.remove(_oldDoctor); } function removePharmacist(address _oldPharmacist) external onlyHospitalAdmins(){ pharmacist.remove(_oldPharmacist); } function removeRadiologist(address _oldRadiologist) external onlyHospitalAdmins(){ radiologist.remove(_oldRadiologist); } function removePathologist(address _oldPathologist) external onlyHospitalAdmins(){ pathologist.remove(_oldPathologist); } //UnauthorizedAccessRestriction modifier onlysuperAdmin(){ require(superAdmins.has(msg.sender),"Only Admins can add HospitalAdmins"); _; } modifier onlyReceptionist(){ require(receptionist.has(msg.sender),"Only Admins can add HospitalAdmins"); _; } modifier onlyHospitalAdmins(){ require(hospitalAdmins.has(msg.sender),'Only Hospital Administrators can perform such Operation'); _; } modifier onlyDoctor(){ require(doctor.has(msg.sender),"Only Registered Doctor can add Patients"); _; } modifier onlyPharmacist(){ require(pharmacist.has(msg.sender),"Only Registered Pharmacist can perform such Operation"); _; } modifier onlyRadiologist(){ require(radiologist.has(msg.sender),"Only Registered Radiologist can perform such Operation"); _; } modifier onlyPathologist(){ require(pathologist.has(msg.sender),"Only Registered Pathologist can perform such Operation"); _; } }
0.4.18