Skip to content
Snippets Groups Projects
Commit 20018bd4 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

Merge branch 'f-set-permissions' into 'dev'

F set permissions

See merge request !6
parents d536f89c f81e672f
No related branches found
No related tags found
1 merge request!6F set permissions
Pipeline #7025 passed with warnings
......@@ -25,15 +25,13 @@
As a result, only a specific user or group may access it.
This script assumes that data similar to the demo server of IndiScale (at
demo.indiscale.com) exists on the server specified in the pycaosdb.ini
configuration.
This script assumes that the user specified in the
pycaosdb.ini configuration can create new entities.
"""
import caosdb as db
from caosdb import administration as admin
import lxml
def assert_user_and_role():
......@@ -50,27 +48,27 @@ out : tuple
"""
try:
human_user = admin._retrieve_user("jane")
_activate_user("jane")
except db.ResourceNotFoundError:
admin._update_user(name="jane", status="ACTIVE")
except db.HTTPResourceNotFoundError:
human_user = admin._insert_user(
"jane", password="Human_Rememberable_Password_1234", status="ACTIVE")
try:
alien_user = admin._retrieve_user("xaxys")
_activate_user("xaxys")
except db.ResourceNotFoundError:
admin._update_user(name="xaxys", status="ACTIVE")
except db.HTTPResourceNotFoundError:
alien_user = admin._insert_user("xaxys", password="4321_Syxax",
status="ACTIVE")
# At the moment, the return value is only "ok" for successful insertions.
try:
human_role = admin._retrieve_role("human")
except db.ResourceNotFoundError:
except db.HTTPResourceNotFoundError:
human_role = admin._insert_role("human", "An Earthling.")
try:
alien_role = admin._retrieve_role("alien")
except db.ResourceNotFoundError:
except db.HTTPResourceNotFoundError:
alien_role = admin._insert_role("alien", "An Extra-terrestrial.")
admin._set_roles("jane", ["human"])
......@@ -80,24 +78,6 @@ out : tuple
("xaxys", list(admin._get_roles("xaxys"))))
def _activate_user(user):
"""Set the user state to "ACTIVE" if necessary.
Parameters
----------
user : str
The user to activate.
Returns
-------
None
"""
user_xml = lxml.etree.fromstring(admin._retrieve_user(user))
if user_xml.xpath("User")[0].attrib["status"] != "ACTIVE":
admin._update_user(user, status="ACTIVE")
def get_entities(count=1):
"""Retrieve one or more entities.
......@@ -111,7 +91,7 @@ Returns
out : Container
A container of retrieved entities, the length is given by the parameter count.
"""
cont = db.execute_query("FIND RECORD Guitar", flags={
cont = db.execute_query("FIND RECORD 'Human Food'", flags={
"P": "0L{n}".format(n=count)})
if len(cont) != count:
raise db.CaosDBException(
......@@ -221,17 +201,35 @@ None
print("Retrieval of all entities was successfully denied.")
def create_test_entities():
"""Create some test entities.
After calling this function, there will be a RecordType "Human Food" with the corresponding Records
"Bread", "Tomatoes", and "Twinkies" inserted in the database.
"""
rt = db.RecordType(name="Human Food", description="Food that can be eaten only by humans").insert()
food = ("Bread", "Tomatoes", "Twinkies")
cont = db.Container()
for i in range(len(food)):
rec = db.Record(food[i])
rec.add_parent(name="Human Food")
cont.append(rec)
cont.insert()
def main():
"""The main function of this script."""
db.connection.connection.get_connection()._login()
"""Create some test entities"""
create_test_entities()
"""Create new users"""
human, alien = assert_user_and_role()
# public, private, undefined entities
"""Load the newly created entities."""
entities = get_entities(count=3)
"""Set permission for the entities (only humans are allowed to eat human food)"""
set_permission(human[1][0], alien[1][0], entities)
"""Test the permissions"""
test_permission((human[0], "Human_Rememberable_Password_1234"),
(alien[0], "4321_Syxax"), entities)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment