Skip to content
Snippets Groups Projects

F set permissions

Merged 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 @@
@@ -25,15 +25,13 @@
As a result, only a specific user or group may access it.
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
This script assumes that the user specified in the
demo.indiscale.com) exists on the server specified in the pycaosdb.ini
pycaosdb.ini configuration can create new entities.
configuration.
"""
"""
import caosdb as db
import caosdb as db
from caosdb import administration as admin
from caosdb import administration as admin
import lxml
def assert_user_and_role():
def assert_user_and_role():
@@ -50,27 +48,27 @@ out : tuple
@@ -50,27 +48,27 @@ out : tuple
"""
"""
try:
try:
human_user = admin._retrieve_user("jane")
human_user = admin._retrieve_user("jane")
_activate_user("jane")
admin._update_user(name="jane", status="ACTIVE")
except db.ResourceNotFoundError:
except db.HTTPResourceNotFoundError:
human_user = admin._insert_user(
human_user = admin._insert_user(
"jane", password="Human_Rememberable_Password_1234", status="ACTIVE")
"jane", password="Human_Rememberable_Password_1234", status="ACTIVE")
try:
try:
alien_user = admin._retrieve_user("xaxys")
alien_user = admin._retrieve_user("xaxys")
_activate_user("xaxys")
admin._update_user(name="xaxys", status="ACTIVE")
except db.ResourceNotFoundError:
except db.HTTPResourceNotFoundError:
alien_user = admin._insert_user("xaxys", password="4321_Syxax",
alien_user = admin._insert_user("xaxys", password="4321_Syxax",
status="ACTIVE")
status="ACTIVE")
# At the moment, the return value is only "ok" for successful insertions.
# At the moment, the return value is only "ok" for successful insertions.
try:
try:
human_role = admin._retrieve_role("human")
human_role = admin._retrieve_role("human")
except db.ResourceNotFoundError:
except db.HTTPResourceNotFoundError:
human_role = admin._insert_role("human", "An Earthling.")
human_role = admin._insert_role("human", "An Earthling.")
try:
try:
alien_role = admin._retrieve_role("alien")
alien_role = admin._retrieve_role("alien")
except db.ResourceNotFoundError:
except db.HTTPResourceNotFoundError:
alien_role = admin._insert_role("alien", "An Extra-terrestrial.")
alien_role = admin._insert_role("alien", "An Extra-terrestrial.")
admin._set_roles("jane", ["human"])
admin._set_roles("jane", ["human"])
@@ -80,24 +78,6 @@ out : tuple
@@ -80,24 +78,6 @@ out : tuple
("xaxys", list(admin._get_roles("xaxys"))))
("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):
def get_entities(count=1):
"""Retrieve one or more entities.
"""Retrieve one or more entities.
@@ -111,7 +91,7 @@ Returns
@@ -111,7 +91,7 @@ Returns
out : Container
out : Container
A container of retrieved entities, the length is given by the parameter count.
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)})
"P": "0L{n}".format(n=count)})
if len(cont) != count:
if len(cont) != count:
raise db.CaosDBException(
raise db.CaosDBException(
@@ -221,17 +201,35 @@ None
@@ -221,17 +201,35 @@ None
print("Retrieval of all entities was successfully denied.")
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():
def main():
"""The main function of this script."""
"""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()
human, alien = assert_user_and_role()
"""Load the newly created entities."""
# public, private, undefined entities
entities = get_entities(count=3)
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)
set_permission(human[1][0], alien[1][0], entities)
 
"""Test the permissions"""
test_permission((human[0], "Human_Rememberable_Password_1234"),
test_permission((human[0], "Human_Rememberable_Password_1234"),
(alien[0], "4321_Syxax"), entities)
(alien[0], "4321_Syxax"), entities)
Loading