Skip to content
Snippets Groups Projects

F set permissions

Closed Henrik tom Wörden requested to merge f-set-permissions into dev
1 file
+ 32
34
Compare changes
  • Side-by-side
  • Inline
+ 32
34
@@ -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)
Loading