|
@@ -31,7 +31,7 @@ Void function main():
|
|
|
core_model = instantiate_node(core, "Model", "")
|
|
|
instantiate_attribute(core, core_model, "name", "CoreFormalism")
|
|
|
instantiate_attribute(core, core_model, "location", core_location)
|
|
|
- instantiate_attribute(core, core_model, "permissions", "330")
|
|
|
+ instantiate_attribute(core, core_model, "permissions", "220")
|
|
|
|
|
|
// Make necessary links for the formalism to the owners
|
|
|
instantiate_link(core, "group", "", core_model, admin_group)
|
|
@@ -80,7 +80,7 @@ Boolean function allow_read(user_id : String, model_id : String):
|
|
|
// Check permissions
|
|
|
String permission
|
|
|
permission = string_get(read_attribute(core, model_id, "permissions"), get_relation_to_model(user_id, model_id))
|
|
|
- if (bool_or(permission == "1", permission == "3")):
|
|
|
+ if (bool_or(permission == "1", permission == "2")):
|
|
|
return True!
|
|
|
else:
|
|
|
return False!
|
|
@@ -93,7 +93,7 @@ Boolean function allow_write(user_id : String, model_id : String):
|
|
|
// Check permissions
|
|
|
String permission
|
|
|
permission = string_get(read_attribute(core, model_id, "permissions"), get_relation_to_model(user_id, model_id))
|
|
|
- if (bool_or(permission == "2", permission == "3")):
|
|
|
+ if (permission == "2"):
|
|
|
return True!
|
|
|
else:
|
|
|
return False!
|
|
@@ -166,14 +166,15 @@ Void function user_function_skip_init(user_id : String)
|
|
|
output(" transformation_execute -- TODO")
|
|
|
output("")
|
|
|
output("Model permission operations")
|
|
|
- output(" permission_modify -- TODO")
|
|
|
- output(" permission_owner -- TODO")
|
|
|
- output(" permission_group -- TODO")
|
|
|
+ output(" permission_modify -- Change model permissions")
|
|
|
+ output(" permission_owner -- Change model owner")
|
|
|
+ output(" permission_group -- Change model group")
|
|
|
output("")
|
|
|
output("Group operations")
|
|
|
- output(" group_create -- TODO")
|
|
|
- output(" group_delete -- TODO")
|
|
|
- output(" group_owner -- Change group owner")
|
|
|
+ output(" group_create -- Create a group"))
|
|
|
+ output(" group_delete -- Delete a group")
|
|
|
+ output(" group_owner_add -- Add group owner")
|
|
|
+ output(" group_owner_delete -- Remove group owner")
|
|
|
output(" group_join -- Add someone to your group")
|
|
|
output(" group_kick -- Kick someone from your group")
|
|
|
output(" group_list -- List all groups you are a member of")
|
|
@@ -214,7 +215,7 @@ Void function user_function_skip_init(user_id : String)
|
|
|
new_model_id = instantiate_node(core, "Model", "")
|
|
|
instantiate_attribute(core, new_model_id, "name", name)
|
|
|
instantiate_attribute(core, new_model_id, "location", location)
|
|
|
- instantiate_attribute(core, new_model_id, "permissions", "300")
|
|
|
+ instantiate_attribute(core, new_model_id, "permissions", "200")
|
|
|
instantiate_link(core, "owner", "", new_model_id, user_id)
|
|
|
instantiate_link(core, "instanceOf", "", new_model_id, type_id)
|
|
|
output("Meta-info correctly set!")
|
|
@@ -284,6 +285,175 @@ Void function user_function_skip_init(user_id : String)
|
|
|
type = read_attribute(core, set_pop(allAssociationDestinations(core, m, "instanceOf")), "name")
|
|
|
output(((((((((((" " + permissions) + " ") + owner) + " ") + group) + " ") + size) + " ") + name) + " : ") + type)
|
|
|
|
|
|
+ elif (cmd == "permission_modify"):
|
|
|
+ String permissions
|
|
|
+ String model_id
|
|
|
+
|
|
|
+ output("Which model do you want to change permissions of?")
|
|
|
+ model_id = get_model_id(input())
|
|
|
+ if (model_id != ""):
|
|
|
+ if (get_relation_to_model(user_id, model_id) == 0):
|
|
|
+ output("New permissions?")
|
|
|
+ permissions = input()
|
|
|
+
|
|
|
+ Boolean fail
|
|
|
+ Integer i
|
|
|
+ i = 0
|
|
|
+ if (string_length(permissions) != 3):
|
|
|
+ fail = True
|
|
|
+ while (bool_and(bool_not(fail), i < 3)):
|
|
|
+ permission = cast_s2i(string_read(permissions, i))
|
|
|
+ if (bool_or(permission < 0, permission > 2)):
|
|
|
+ fail = True
|
|
|
+
|
|
|
+ if (bool_not(fail)):
|
|
|
+ unset_attribute(core, model_id, "permissions")
|
|
|
+ instantiate_attribute(core, model_id, "permissions", permissions)
|
|
|
+ else:
|
|
|
+ output("Permissions must be a string of three characters with each character being a digit between 0 and 2")
|
|
|
+ else:
|
|
|
+ output("Permission denied!")
|
|
|
+ else:
|
|
|
+ output("No such model!")
|
|
|
+
|
|
|
+ elif (cmd == "permission_owner"):
|
|
|
+ String permissions
|
|
|
+ String model_id
|
|
|
+ String user_id
|
|
|
+
|
|
|
+ output("Which model do you want to change owner of?")
|
|
|
+ model_id = get_model_id(input())
|
|
|
+ if (model_id != ""):
|
|
|
+ if (get_relation_to_model(user_id, model_id) == 0):
|
|
|
+ output("New owner?")
|
|
|
+ user_id = get_user_id(input())
|
|
|
+ if (user_id != ""):
|
|
|
+ model_delete_element(set_pop(allOutgoingAssociationInstances(core, model_id, "owner")))
|
|
|
+ instantiate_link(core, "owner", "", model_id, user_id)
|
|
|
+ else:
|
|
|
+ output("No such user!")
|
|
|
+ else:
|
|
|
+ output("Permission denied!")
|
|
|
+ else:
|
|
|
+ output("No such model!")
|
|
|
+
|
|
|
+ elif (cmd == "permission_group"):
|
|
|
+ String permissions
|
|
|
+ String model_id
|
|
|
+ String group_id
|
|
|
+
|
|
|
+ output("Which model do you want to change permissions of?")
|
|
|
+ model_id = get_model_id(input())
|
|
|
+ if (model_id != ""):
|
|
|
+ if (get_relation_to_model(user_id, model_id) == 0):
|
|
|
+ output("New group?")
|
|
|
+ group_id = get_group_id(input())
|
|
|
+ if (group_id != ""):
|
|
|
+ model_delete_element(set_pop(allOutgoingAssociationInstances(core, model_id, "group")))
|
|
|
+ instantiate_link(core, "group", "", model_id, group_id)
|
|
|
+ else:
|
|
|
+ output("No such group!")
|
|
|
+ else:
|
|
|
+ output("Permission denied!")
|
|
|
+ else:
|
|
|
+ output("No such model!")
|
|
|
+
|
|
|
+ elif (cmd == "group_create"):
|
|
|
+ // Create a new group and become its owner
|
|
|
+ String group_id
|
|
|
+ String name
|
|
|
+
|
|
|
+ output("Which group do you want to create?")
|
|
|
+ name = input()
|
|
|
+ group_id = get_group_id(name)
|
|
|
+ if (group_id == ""):
|
|
|
+ group_id = instantiate_node(core, "Group", "")
|
|
|
+ instantiate_attribute(core, group_id, "name", name)
|
|
|
+ instantiate_link(core, "belongsTo", "", user_id, group_id)
|
|
|
+ isntantiate_link(core, "owner", "", group_id, user_id)
|
|
|
+ output("Group created!")
|
|
|
+ else:
|
|
|
+ output("Group already exists")
|
|
|
+
|
|
|
+ elif (cmd == "group_delete"):
|
|
|
+ // Delete an existing group
|
|
|
+ String group_id
|
|
|
+ String name
|
|
|
+
|
|
|
+ output("Which group do you want to delete?")
|
|
|
+ name = input()
|
|
|
+ group_id = get_group_id(name)
|
|
|
+ if (group_id != ""):
|
|
|
+ if (allow_group_modify(user_id, group_id)):
|
|
|
+ model_delete_element(core, group_id)
|
|
|
+ else:
|
|
|
+ output("Permission denied")
|
|
|
+ else:
|
|
|
+ output("No such group")
|
|
|
+
|
|
|
+ elif (cmd == "group_owner_add"):
|
|
|
+ // Add an owner to your group
|
|
|
+ String group_id
|
|
|
+
|
|
|
+ output("Which group do you want to add an owner to?")
|
|
|
+ group_id = get_group_id(input())
|
|
|
+ if (group_id != ""):
|
|
|
+ if (allow_group_modify(user_id, group_id)):
|
|
|
+ output("Which user do you want to make an owner?")
|
|
|
+ other_user_id = get_user_id(input())
|
|
|
+ if (other_user_id != ""):
|
|
|
+ Element overlap
|
|
|
+
|
|
|
+ overlap = set_overlap(allIncomingAssociationInstances(core, user_id, "owner"), allOutgoingAssociationInstances(core, group_id, "owner"))
|
|
|
+ if (read_nr_out(overlap) == 0):
|
|
|
+ instantiate_link(core, "owner", "", group_id, user_id)
|
|
|
+
|
|
|
+ overlap = set_overlap(allOutgoingAssociationInstances(core, user_id, "belongsTo"), allIncomingAssociationInstances(core, group_id, "belongsTo"))
|
|
|
+
|
|
|
+ if (read_nr_out(overlap) == 0):
|
|
|
+ instantiate_link(core, "belongsTo", "", user_id, group_id)
|
|
|
+
|
|
|
+ output("New owner added to group!")
|
|
|
+
|
|
|
+ else:
|
|
|
+ output("User is already an owner!")
|
|
|
+ else:
|
|
|
+ output("No such user")
|
|
|
+ else:
|
|
|
+ output("Permission denied!")
|
|
|
+ else:
|
|
|
+ output("No such group")
|
|
|
+
|
|
|
+ elif (cmd == "group_owner_delete"):
|
|
|
+ // Remove an owner from your group
|
|
|
+ String group_id
|
|
|
+
|
|
|
+ output("Which group do you want to disown someone from?")
|
|
|
+ group_id = get_group_id(input())
|
|
|
+ if (group_id != ""):
|
|
|
+ if (allow_group_modify(user_id, group_id)):
|
|
|
+ output("Which user do you want to disown?")
|
|
|
+ other_user_id = get_user_id(input())
|
|
|
+ if (other_user_id != ""):
|
|
|
+ Element overlap
|
|
|
+
|
|
|
+ overlap = set_overlap(allOutgoingAssociationInstances(core, user_id, "belongsTo"), allIncomingAssociationInstances(core, group_id, "belongsTo"))
|
|
|
+ if (read_nr_out(overlap) > 0):
|
|
|
+ overlap = set_overlap(allIncomingAssociationInstances(core, user_id, "owner"), allOutgoingAssociationInstances(core, group_id, "owner"))
|
|
|
+ if (read_nr_out(overlap) > 0):
|
|
|
+ model_delete_element(core, set_pop(overlap))
|
|
|
+ output("Disowned group from user!")
|
|
|
+ else:
|
|
|
+ output("User is not even an owner of the group!")
|
|
|
+ else:
|
|
|
+ output("User is not even a member of the group!")
|
|
|
+ else:
|
|
|
+ output("No such user")
|
|
|
+ else:
|
|
|
+ output("Permission denied!")
|
|
|
+ else:
|
|
|
+ output("No such group")
|
|
|
+
|
|
|
elif (cmd == "group_join"):
|
|
|
// Add someone to your group
|
|
|
String group_id
|