|
27 | 27 | import javax.naming.ConfigurationException; |
28 | 28 |
|
29 | 29 | import org.apache.cloudstack.acl.APIAccessChecker; |
| 30 | +import org.apache.cloudstack.acl.RoleType; |
| 31 | +import static org.apache.cloudstack.acl.RoleType.*; |
30 | 32 | import org.apache.log4j.Logger; |
31 | 33 |
|
32 | 34 | import com.cloud.exception.PermissionDeniedException; |
33 | 35 | import com.cloud.server.ManagementServer; |
34 | | -import com.cloud.user.Account; |
35 | | -import com.cloud.user.AccountManager; |
36 | | -import com.cloud.user.User; |
37 | 36 | import com.cloud.utils.PropertiesUtil; |
38 | 37 | import com.cloud.utils.component.AdapterBase; |
39 | 38 | import com.cloud.utils.component.ComponentLocator; |
40 | | -import com.cloud.utils.component.Inject; |
41 | 39 | import com.cloud.utils.component.PluggableService; |
42 | 40 |
|
43 | | -/* |
44 | | - * This is the default API access checker that grab's the user's account |
45 | | - * based on the account type, access is granted referring to commands in all *.properties files. |
46 | | - */ |
47 | | - |
| 41 | +// This is the default API access checker that grab's the user's account |
| 42 | +// based on the account type, access is granted |
48 | 43 | @Local(value=APIAccessChecker.class) |
49 | 44 | public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIAccessChecker { |
50 | 45 |
|
51 | 46 | protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); |
52 | | - public static final short ADMIN_COMMAND = 1; |
53 | | - public static final short DOMAIN_ADMIN_COMMAND = 4; |
54 | | - public static final short RESOURCE_DOMAIN_ADMIN_COMMAND = 2; |
55 | | - public static final short USER_COMMAND = 8; |
56 | | - private static List<String> s_userCommands = null; |
57 | | - private static List<String> s_resellerCommands = null; // AKA domain-admin |
58 | | - private static List<String> s_adminCommands = null; |
59 | | - private static List<String> s_resourceDomainAdminCommands = null; |
60 | | - private static List<String> s_allCommands = null; |
61 | | - |
62 | | - protected @Inject AccountManager _accountMgr; |
| 47 | + private static Set<String> s_userCommands = null; |
| 48 | + private static Set<String> s_resellerCommands = null; // AKA domain-admin |
| 49 | + private static Set<String> s_adminCommands = null; |
| 50 | + private static Set<String> s_resourceDomainAdminCommands = null; |
| 51 | + private static Set<String> s_allCommands = null; |
63 | 52 |
|
64 | 53 | protected StaticRoleBasedAPIAccessChecker() { |
65 | 54 | super(); |
66 | | - s_allCommands = new ArrayList<String>(); |
67 | | - s_userCommands = new ArrayList<String>(); |
68 | | - s_resellerCommands = new ArrayList<String>(); |
69 | | - s_adminCommands = new ArrayList<String>(); |
70 | | - s_resourceDomainAdminCommands = new ArrayList<String>(); |
| 55 | + s_allCommands = new HashSet<String>(); |
| 56 | + s_userCommands = new HashSet<String>(); |
| 57 | + s_resellerCommands = new HashSet<String>(); |
| 58 | + s_adminCommands = new HashSet<String>(); |
| 59 | + s_resourceDomainAdminCommands = new HashSet<String>(); |
71 | 60 | } |
72 | 61 |
|
73 | 62 | @Override |
74 | | - public boolean canAccessAPI(User user, String apiCommandName) |
| 63 | + public boolean canAccessAPI(RoleType roleType, String apiCommandName) |
75 | 64 | throws PermissionDeniedException{ |
76 | 65 |
|
77 | 66 | boolean commandExists = s_allCommands.contains(apiCommandName); |
78 | 67 |
|
79 | | - if(commandExists && user != null){ |
80 | | - Long accountId = user.getAccountId(); |
81 | | - Account userAccount = _accountMgr.getAccount(accountId); |
82 | | - short accountType = userAccount.getType(); |
83 | | - return isCommandAvailableForAccount(accountType, apiCommandName); |
| 68 | + if(commandExists) { |
| 69 | + return isCommandAvailableForAccount(roleType, apiCommandName); |
84 | 70 | } |
85 | 71 |
|
86 | 72 | return commandExists; |
87 | 73 | } |
88 | 74 |
|
89 | | - private static boolean isCommandAvailableForAccount(short accountType, String commandName) { |
| 75 | + private static boolean isCommandAvailableForAccount(RoleType roleType, String commandName) { |
90 | 76 | boolean isCommandAvailable = false; |
91 | | - switch (accountType) { |
92 | | - case Account.ACCOUNT_TYPE_ADMIN: |
93 | | - isCommandAvailable = s_adminCommands.contains(commandName); |
94 | | - break; |
95 | | - case Account.ACCOUNT_TYPE_DOMAIN_ADMIN: |
96 | | - isCommandAvailable = s_resellerCommands.contains(commandName); |
97 | | - break; |
98 | | - case Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN: |
99 | | - isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); |
100 | | - break; |
101 | | - case Account.ACCOUNT_TYPE_NORMAL: |
102 | | - isCommandAvailable = s_userCommands.contains(commandName); |
103 | | - break; |
| 77 | + switch (roleType) { |
| 78 | + case Admin: |
| 79 | + isCommandAvailable = s_adminCommands.contains(commandName); |
| 80 | + break; |
| 81 | + case DomainAdmin: |
| 82 | + isCommandAvailable = s_resellerCommands.contains(commandName); |
| 83 | + break; |
| 84 | + case ResourceAdmin: |
| 85 | + isCommandAvailable = s_resourceDomainAdminCommands.contains(commandName); |
| 86 | + break; |
| 87 | + case User: |
| 88 | + isCommandAvailable = s_userCommands.contains(commandName); |
| 89 | + break; |
104 | 90 | } |
105 | 91 | return isCommandAvailable; |
106 | 92 | } |
@@ -157,16 +143,16 @@ private void processConfigFiles(List<String> configFiles) { |
157 | 143 |
|
158 | 144 | try { |
159 | 145 | short cmdPermissions = Short.parseShort(mask); |
160 | | - if ((cmdPermissions & ADMIN_COMMAND) != 0) { |
| 146 | + if ((cmdPermissions & Admin.getValue()) != 0) { |
161 | 147 | s_adminCommands.add((String) key); |
162 | 148 | } |
163 | | - if ((cmdPermissions & RESOURCE_DOMAIN_ADMIN_COMMAND) != 0) { |
| 149 | + if ((cmdPermissions & ResourceAdmin.getValue()) != 0) { |
164 | 150 | s_resourceDomainAdminCommands.add((String) key); |
165 | 151 | } |
166 | | - if ((cmdPermissions & DOMAIN_ADMIN_COMMAND) != 0) { |
| 152 | + if ((cmdPermissions & DomainAdmin.getValue()) != 0) { |
167 | 153 | s_resellerCommands.add((String) key); |
168 | 154 | } |
169 | | - if ((cmdPermissions & USER_COMMAND) != 0) { |
| 155 | + if ((cmdPermissions & User.getValue()) != 0) { |
170 | 156 | s_userCommands.add((String) key); |
171 | 157 | } |
172 | 158 | s_allCommands.addAll(s_adminCommands); |
|
0 commit comments