Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions access_indexor.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ AccessIndexor20190528194200ML: Removes contentSpace is field as it is now inheri
AccessIndexor20190605162000ML: Adds cleanUp functions to remove references to dead objects
AccessIndexor20190722214200ML: Fix false positive for group-based rights when object owner match group owner
AccessIndexor20190801141000ML: Adds method to provide ACCESS right to the caller object
AccessIndexor20191113202400ML: Ensures accessor has at least access right to a group to benefit from group rights
*/


contract AccessIndexor is Ownable {

bytes32 public version = "AccessIndexor20190801141000ML";
bytes32 public version = "AccessIndexor20191113202400ML";

event RightsChanged(address principal, address entity, uint8 aggregate);
//event dbUint8(string label, uint8 value);
Expand Down Expand Up @@ -216,7 +217,7 @@ contract AccessIndexor is Ownable {
address group;
for (uint i = 0; i < accessGroups.length; i++) {
group = accessGroups.list[i];
if (group != 0x0) {
if ((group != 0x0) && (accessGroups.rights[group] >= 10)) { //needs to be at least a member, seeing is not enough
groupObj = AccessIndexor(group);
if (groupObj.checkDirectRights(index_type, obj, access_type) == true) {
return true;
Expand Down
27 changes: 15 additions & 12 deletions base_access_control_group.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
pragma solidity 0.4.24;

//import "./ownable.sol";
import {BaseFactory} from "./base_content_space.sol";
import {BaseContentSpace} from "./base_content_space.sol";
import {BaseFactory} from "./base_factory.sol";
import {UserSpace} from "./user_space.sol";
import {NodeSpace} from "./node_space.sol";
import {AccessIndexor} from "./access_indexor.sol";
import {Editable} from "./editable.sol";
import {Container} from "./container.sol";
Expand All @@ -17,12 +18,13 @@ BsAccessCtrlGrp20190722161600ML: Made editable
BsAccessCtrlGrp20190722214400ML: Provides the list of members and managers
BsAccessCtrlGrp20190723130500ML: Fixes typo in managersNum
BsAccessCtrlGrp20190723165900ML: Fixes deletion/adding to groups
BsAccessCtrlGrp20191107152100ML: Extends ability to modify (including granting membership) to all users with EDIT rights
*/


contract BaseAccessControlGroup is AccessIndexor, Editable {

bytes32 public version ="BsAccessCtrlGrp20190723165900ML"; //class name (max 16), date YYYYMMDD, time HHMMSS and Developer initials XX
bytes32 public version ="BsAccessCtrlGrp20191107152100ML"; //class name (max 16), date YYYYMMDD, time HHMMSS and Developer initials XX

//mapping (address => bool) public members;
//mapping (address => bool) public managers;
Expand Down Expand Up @@ -62,7 +64,7 @@ contract BaseAccessControlGroup is AccessIndexor, Editable {
managersNum++;
}
emit ManagerAccessGranted(manager);
BaseContentSpace contentSpaceObj = BaseContentSpace(contentSpace);
UserSpace contentSpaceObj = UserSpace(contentSpace);
address walletAddress = contentSpaceObj.userWallets(manager);
AccessIndexor userWallet = AccessIndexor(walletAddress);
userWallet.setAccessGroupRights(address(this), userWallet.TYPE_EDIT(), userWallet.ACCESS_TENTATIVE());
Expand All @@ -82,7 +84,7 @@ contract BaseAccessControlGroup is AccessIndexor, Editable {
}
}
emit ManagerAccessRevoked(manager);
BaseContentSpace contentSpaceObj = BaseContentSpace(contentSpace);
UserSpace contentSpaceObj = UserSpace(contentSpace);
address walletAddress = contentSpaceObj.userWallets(manager);
AccessIndexor userWallet = AccessIndexor(walletAddress);
userWallet.setAccessGroupRights(address(this), userWallet.TYPE_EDIT(), userWallet.ACCESS_NONE());
Expand All @@ -93,7 +95,7 @@ contract BaseAccessControlGroup is AccessIndexor, Editable {
}

function hasAccessRight(address candidate, bool mgr) public view returns (bool) {
BaseContentSpace contentSpaceObj = BaseContentSpace(contentSpace);
UserSpace contentSpaceObj = UserSpace(contentSpace);
address walletAddress = contentSpaceObj.userWallets(candidate);
AccessIndexor userWallet = AccessIndexor(walletAddress);
if (mgr==true) {
Expand All @@ -103,7 +105,10 @@ contract BaseAccessControlGroup is AccessIndexor, Editable {
}
}

//event dbg_setAccessGroupRights(address a, uint8 b, uint8 c);
function canEdit() public view returns (bool) {
return hasManagerAccess(tx.origin);
}

function grantAccess(address candidate) public {
require(hasManagerAccess(msg.sender) == true);
bool already = false;
Expand All @@ -124,12 +129,10 @@ contract BaseAccessControlGroup is AccessIndexor, Editable {

emit MemberAdded(candidate);

BaseContentSpace contentSpaceObj = BaseContentSpace(contentSpace);
UserSpace contentSpaceObj = UserSpace(contentSpace);
address walletAddress = contentSpaceObj.userWallets(candidate);
AccessIndexor userWallet = AccessIndexor(walletAddress);
userWallet.setAccessGroupRights(address(this), userWallet.TYPE_ACCESS(), userWallet.ACCESS_TENTATIVE());
//emit dbg_setAccessGroupRights(walletAddress, userWallet.TYPE_ACCESS(), userWallet.ACCESS_TENTATIVE());
//emit dbg_setAccessGroupRights(address(this), userWallet.TYPE_ACCESS(), userWallet.ACCESS_TENTATIVE());
}

function revokeAccess(address candidate) public {
Expand All @@ -146,7 +149,7 @@ contract BaseAccessControlGroup is AccessIndexor, Editable {
}
}
emit MemberRevoked(candidate);
BaseContentSpace contentSpaceObj = BaseContentSpace(contentSpace);
UserSpace contentSpaceObj = UserSpace(contentSpace);
address walletAddress = contentSpaceObj.userWallets(candidate);
AccessIndexor userWallet = AccessIndexor(walletAddress);
userWallet.setAccessGroupRights(address(this), userWallet.TYPE_ACCESS(), userWallet.ACCESS_NONE());
Expand All @@ -157,7 +160,7 @@ contract BaseAccessControlGroup is AccessIndexor, Editable {
}

function canConfirm() public view returns (bool) {
BaseContentSpace bcs = BaseContentSpace(contentSpace);
NodeSpace bcs = NodeSpace(contentSpace);
return bcs.canNodePublish(msg.sender);
}

Expand Down
39 changes: 23 additions & 16 deletions base_access_wallet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ pragma solidity 0.4.24;

import {Ownable} from "./ownable.sol";
import {Accessible} from "./accessible.sol";
import {AccessIndexor} from "./access_indexor.sol";
import {Container} from "./container.sol";
import {BaseContent} from "./base_content.sol";
import {BaseContentSpace} from "./base_content_space.sol";
import "./access_indexor.sol";
//import {BaseContent} from "./base_content.sol";
import {KMSSpace} from "./kms_space.sol";

import "./transactable.sol";
import {Factory} from "./factory.sol";

/* -- Revision history --
BaseAccessWallet20190320114000ML: First versioned released
Expand All @@ -28,7 +30,7 @@ contract BaseAccessWallet is Accessible, Container, AccessIndexor, Transactable
function canConfirm() public view returns (bool) {
return canNodePublish(msg.sender);
}

/*
function accessRequestMsg(
address content_address,
uint8 level,
Expand All @@ -51,18 +53,18 @@ contract BaseAccessWallet is Accessible, Container, AccessIndexor, Transactable

function contentAccessRequest(
address content_address,
bytes /*signature*/,
bytes signature,
uint8 level,
string pke_requestor,
string pke_AFGH,
bytes32[] custom_values,
address[] stakeholders
) public returns (uint256) {
/*

//Signature should be valid for requested operation
bytes32 message = accessRequestMsg(content_address, level, pke_requestor, pke_AFGH, custom_values, stakeholders);
require(owner == recoverSignerFromMessage(message,signature));
*/
//bytes32 message = accessRequestMsg(content_address, level, pke_requestor, pke_AFGH, custom_values, stakeholders);
//require(owner == recoverSignerFromMessage(message,signature));


BaseContent content = BaseContent(content_address);
uint256 requiredFund;
Expand All @@ -77,21 +79,22 @@ contract BaseAccessWallet is Accessible, Container, AccessIndexor, Transactable

function contentAccessComplete(
address content_address,
bytes /*signature*/,
bytes signature,
uint256 request_ID,
uint256 score_pct,
bytes32 ml_out_hash
) public payable returns (bool) {
/*

//Signature should be valid for requested operation
bytes32 message = accessCompleteMsg(content_address, request_ID, score_pct, ml_out_hash);
require(owner == recoverSignerFromMessage(message,signature));
*/
//bytes32 message = accessCompleteMsg(content_address, request_ID, score_pct, ml_out_hash);
//require(owner == recoverSignerFromMessage(message,signature));


BaseContent content = BaseContent(content_address);
return content.accessComplete(request_ID, score_pct, ml_out_hash);

}
*/

// WIP - state channel support

Expand Down Expand Up @@ -129,7 +132,7 @@ contract BaseAccessWallet is Accessible, Container, AccessIndexor, Transactable
external
returns (bool) {

BaseContentSpace spc = BaseContentSpace(contentSpace);
KMSSpace spc = KMSSpace(contentSpace);
require(msg.sender == contentSpace || spc.checkKMSAddr(msg.sender) > 0);
require(spc.checkKMSAddr(_guarantor) > 0);

Expand Down Expand Up @@ -171,11 +174,15 @@ contract BaseAccessWallet is Accessible, Container, AccessIndexor, Transactable
BsAccWltFactory20190506154200ML: First versioned released
*/

contract BaseAccessWalletFactory is Ownable {
contract BaseAccessWalletFactory is Ownable, Factory {

bytes32 public version ="BsAccWltFactory20190506154200ML"; //class name (max 16), date YYYYMMDD, time HHMMSS and Developer initials XX

function createAccessWallet() public returns (address) {
return create();
}

function create() public returns (address) {
return (new BaseAccessWallet(msg.sender));
}

Expand Down
Loading