bugfix, don't use methods...
[plcapi.git] / PLC / AuthorizeHelpers.py
1 #
2 # Thierry Parmentelat - INRIA
3 #
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
8
9 class AuthorizeHelpers:
10
11     @staticmethod
12     def interface_belongs_to_person (api,interface, person):
13         try:
14             node=Nodes(api,[interface['node_id']])[0]
15             return AuthorizeHelpers.node_belong_to_person (api, node, person)
16         except:
17             return False
18
19     @staticmethod
20     def node_belongs_to_person (api, node, person):
21         try:
22             site=Sites(api,[node['site_id']])[0]
23             return AuthorizeHelpers.person_belongs_to_site (api, person, site)
24         except:
25             return False
26
27     @staticmethod
28     def person_belongs_to_site (api, person, site):
29         return site['site_id'] in person['site_ids']
30
31     @staticmethod
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']
37         else:
38             raise PLCInvalidArgument, "caller_may_access_tag_type - unexpected arg"
39
40     @staticmethod
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']
44         except: return False
45
46     @staticmethod
47     def person_in_slice (api, caller_person, slice):
48         return caller_person['person_id'] in slice['person_ids']
49
50     @staticmethod
51     def node_in_slice (api, caller_node, slice):
52         return caller_node['node_id'] in slice['node_ids']
53
54     @staticmethod
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']
58         else:
59             try:   return Nodes(api,node_id_or_hostname_in_slice)[0]['node_id'] in slice['node_ids']
60             except:return False
61
62