2 # Thierry Parmentelat - INRIA
4 from PLC.Faults import *
5 from PLC.Persons import Person
6 from PLC.Nodes import Node
8 class AuthorizeHelpers:
11 def interface_belongs_to_person (api,interface, person):
13 node=api.GetNodes(interface['node_id'])[0]
14 return node_belong_to_person (api, node, person)
19 def node_belongs_to_person (api, node, person):
21 site=api.GetSites(node['site_id'])[0]
22 return person_belongs_to_site (api, person, site)
27 def person_belongs_to_site (api, person, site):
28 return site['site_id'] in person['site_ids']
31 def caller_may_access_tag_type (api, caller, tag_type):
32 if isinstance(caller,Person):
33 return len(set(caller['roles']).intersection(set(tag_type['roles'])))!=0
34 elif isinstance(caller,Node):
35 return 'node' in tag_type['roles']
37 raise PLCInvalidArgument, "caller_may_access_tag_type - unexpected arg"
40 def person_access_person (api, caller_person, subject_person):
41 # keep it simple for now - could be a bit more advanced for PIs maybe
42 try: return caller_person['person_id'] == subject_person['person_id']
46 def person_in_slice (api, caller_person, slice):
47 return caller_person['person_id'] in slice['person_ids']
50 def node_in_slice (api, caller_node, slice):
51 return caller_node['node_id'] in slice['node_ids']
54 def node_id_or_hostname_in_slice (api, node_id_or_hostname, slice):
55 if isinstance (node_id_or_hostname,int):
56 return node_id_or_hostname in slice['node_ids']
58 try: return GetNodes(node_id_or_hostname_in_slice)[0]['node_id'] in slice['node_ids']