2 # Thierry Parmentelat - INRIA
4 from PLC.Faults import *
5 from PLC.Persons import Persons,Person
6 from PLC.Sites import Sites,Site
7 from PLC.Nodes import Nodes,Node
9 class AuthorizeHelpers:
12 def interface_belongs_to_person (api,interface, person):
14 node=Nodes(api,[interface['node_id']])[0]
15 return AuthorizeHelpers.node_belong_to_person (api, node, person)
20 def node_belongs_to_person (api, node, person):
22 site=Sites(api,[node['site_id']])[0]
23 return AuthorizeHelpers.person_belongs_to_site (api, person, site)
28 def person_belongs_to_site (api, person, site):
29 return site['site_id'] in person['site_ids']
32 def caller_may_access_tag_type (api, caller, tag_type):
33 if isinstance(caller,Person):
34 return len(set(caller['roles']).intersection(set(tag_type['roles'])))!=0
35 elif isinstance(caller,Node):
36 return 'node' in tag_type['roles']
38 raise PLCInvalidArgument, "caller_may_access_tag_type - unexpected arg"
41 def person_access_person (api, caller_person, subject_person):
42 # keep it simple for now - could be a bit more advanced for PIs maybe
43 try: return caller_person['person_id'] == subject_person['person_id']
47 def person_in_slice (api, caller_person, slice):
48 return caller_person['person_id'] in slice['person_ids']
51 def node_in_slice (api, caller_node, slice):
52 return caller_node['node_id'] in slice['node_ids']
55 def node_id_or_hostname_in_slice (api, node_id_or_hostname, slice):
56 if isinstance (node_id_or_hostname,int):
57 return node_id_or_hostname in slice['node_ids']
59 try: return Nodes(api,node_id_or_hostname_in_slice)[0]['node_id'] in slice['node_ids']