defaults.go 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package policy
  15. import (
  16. "yunion.io/x/pkg/util/rbacscope"
  17. api "yunion.io/x/onecloud/pkg/apis/compute"
  18. "yunion.io/x/onecloud/pkg/cloudcommon/consts"
  19. common_policy "yunion.io/x/onecloud/pkg/cloudcommon/policy"
  20. "yunion.io/x/onecloud/pkg/util/rbacutils"
  21. )
  22. const (
  23. PolicyActionPerform = common_policy.PolicyActionPerform
  24. PolicyActionList = common_policy.PolicyActionList
  25. PolicyActionGet = common_policy.PolicyActionGet
  26. PolicyActionCreate = common_policy.PolicyActionCreate
  27. PolicyActionUpdate = common_policy.PolicyActionUpdate
  28. PolicyActionDelete = common_policy.PolicyActionDelete
  29. )
  30. var (
  31. predefinedDefaultPolicies = []rbacutils.SRbacPolicy{
  32. {
  33. Auth: true,
  34. Scope: rbacscope.ScopeSystem,
  35. Rules: []rbacutils.SRbacRule{
  36. {
  37. Service: api.SERVICE_TYPE,
  38. Resource: "zones",
  39. Action: PolicyActionList,
  40. Result: rbacutils.Allow,
  41. },
  42. {
  43. Service: api.SERVICE_TYPE,
  44. Resource: "zones",
  45. Action: PolicyActionGet,
  46. Result: rbacutils.Allow,
  47. },
  48. {
  49. Service: api.SERVICE_TYPE,
  50. Resource: "cloudregions",
  51. Action: PolicyActionList,
  52. Result: rbacutils.Allow,
  53. },
  54. {
  55. Service: api.SERVICE_TYPE,
  56. Resource: "cloudregions",
  57. Action: PolicyActionGet,
  58. Result: rbacutils.Allow,
  59. },
  60. {
  61. Service: api.SERVICE_TYPE,
  62. Resource: "cachedimages",
  63. Action: PolicyActionList,
  64. Result: rbacutils.Allow,
  65. },
  66. {
  67. Service: api.SERVICE_TYPE,
  68. Resource: "cachedimages",
  69. Action: PolicyActionGet,
  70. Result: rbacutils.Allow,
  71. },
  72. {
  73. Service: api.SERVICE_TYPE,
  74. Resource: "dbinstance_skus",
  75. Action: PolicyActionList,
  76. Result: rbacutils.Allow,
  77. },
  78. {
  79. Service: api.SERVICE_TYPE,
  80. Resource: "dbinstance_skus",
  81. Action: PolicyActionGet,
  82. Result: rbacutils.Allow,
  83. },
  84. {
  85. Service: api.SERVICE_TYPE,
  86. Resource: "serverskus",
  87. Action: PolicyActionList,
  88. Result: rbacutils.Allow,
  89. },
  90. {
  91. Service: api.SERVICE_TYPE,
  92. Resource: "serverskus",
  93. Action: PolicyActionGet,
  94. Result: rbacutils.Allow,
  95. },
  96. {
  97. Service: api.SERVICE_TYPE,
  98. Resource: "secgrouprules",
  99. Action: PolicyActionGet,
  100. Result: rbacutils.Allow,
  101. },
  102. {
  103. Service: api.SERVICE_TYPE,
  104. Resource: "elasticcacheskus",
  105. Action: PolicyActionList,
  106. Result: rbacutils.Allow,
  107. },
  108. {
  109. Service: api.SERVICE_TYPE,
  110. Resource: "elasticcacheskus",
  111. Action: PolicyActionGet,
  112. Result: rbacutils.Allow,
  113. },
  114. {
  115. Service: api.SERVICE_TYPE,
  116. Resource: "secgrouprules",
  117. Action: PolicyActionList,
  118. Result: rbacutils.Allow,
  119. },
  120. {
  121. Service: api.SERVICE_TYPE,
  122. Resource: "loadbalancerclusters",
  123. Action: PolicyActionList,
  124. Result: rbacutils.Allow,
  125. },
  126. {
  127. Service: api.SERVICE_TYPE,
  128. Resource: "schedtags",
  129. Action: PolicyActionList,
  130. Result: rbacutils.Allow,
  131. },
  132. {
  133. Service: api.SERVICE_TYPE,
  134. Resource: "dns_recordsets",
  135. Action: PolicyActionList,
  136. Result: rbacutils.Allow,
  137. },
  138. {
  139. Service: api.SERVICE_TYPE,
  140. Resource: "dns_recodsets",
  141. Action: PolicyActionGet,
  142. Result: rbacutils.Allow,
  143. },
  144. {
  145. Service: api.SERVICE_TYPE,
  146. Resource: "cloudaccounts",
  147. Action: PolicyActionGet,
  148. Extra: []string{"saml"},
  149. Result: rbacutils.Allow,
  150. },
  151. {
  152. Service: api.SERVICE_TYPE,
  153. Resource: "waf_rules",
  154. Action: PolicyActionGet,
  155. Result: rbacutils.Allow,
  156. },
  157. {
  158. Service: api.SERVICE_TYPE,
  159. Resource: "waf_rules",
  160. Action: PolicyActionList,
  161. Result: rbacutils.Allow,
  162. },
  163. {
  164. Service: api.SERVICE_TYPE,
  165. Resource: "capabilities",
  166. Action: PolicyActionList,
  167. Result: rbacutils.Allow,
  168. },
  169. },
  170. },
  171. {
  172. Auth: true,
  173. Scope: rbacscope.ScopeUser,
  174. Rules: []rbacutils.SRbacRule{
  175. {
  176. Service: api.SERVICE_TYPE,
  177. Resource: "keypairs",
  178. Action: PolicyActionGet,
  179. Result: rbacutils.Allow,
  180. },
  181. {
  182. Service: api.SERVICE_TYPE,
  183. Resource: "keypairs",
  184. Action: PolicyActionList,
  185. Result: rbacutils.Allow,
  186. },
  187. {
  188. Service: api.SERVICE_TYPE,
  189. Resource: "keypairs",
  190. Action: PolicyActionCreate,
  191. Result: rbacutils.Allow,
  192. },
  193. {
  194. Service: api.SERVICE_TYPE,
  195. Resource: "keypairs",
  196. Action: PolicyActionUpdate,
  197. Result: rbacutils.Allow,
  198. },
  199. {
  200. Service: api.SERVICE_TYPE,
  201. Resource: "keypairs",
  202. Action: PolicyActionDelete,
  203. Result: rbacutils.Allow,
  204. },
  205. },
  206. },
  207. {
  208. Auth: true,
  209. Scope: rbacscope.ScopeDomain,
  210. Rules: []rbacutils.SRbacRule{
  211. {
  212. Service: api.SERVICE_TYPE,
  213. Resource: "cloudaccounts",
  214. Action: PolicyActionList,
  215. Result: rbacutils.Allow,
  216. },
  217. {
  218. Service: api.SERVICE_TYPE,
  219. Resource: "cloudaccounts",
  220. Action: PolicyActionGet,
  221. Result: rbacutils.Allow,
  222. },
  223. {
  224. Service: api.SERVICE_TYPE,
  225. Resource: "cloudproviders",
  226. Action: PolicyActionList,
  227. Result: rbacutils.Allow,
  228. },
  229. {
  230. Service: api.SERVICE_TYPE,
  231. Resource: "cloudproviders",
  232. Action: PolicyActionGet,
  233. Result: rbacutils.Allow,
  234. },
  235. {
  236. Service: api.SERVICE_TYPE,
  237. Resource: "domain_quotas",
  238. Action: PolicyActionGet,
  239. Result: rbacutils.Allow,
  240. },
  241. {
  242. Service: api.SERVICE_TYPE,
  243. Resource: "domain_quotas",
  244. Action: PolicyActionList,
  245. Result: rbacutils.Allow,
  246. },
  247. {
  248. Service: api.SERVICE_TYPE,
  249. Resource: "infras_quotas",
  250. Action: PolicyActionGet,
  251. Result: rbacutils.Allow,
  252. },
  253. {
  254. Service: api.SERVICE_TYPE,
  255. Resource: "infras_quotas",
  256. Action: PolicyActionList,
  257. Result: rbacutils.Allow,
  258. },
  259. {
  260. Service: api.SERVICE_TYPE,
  261. Resource: "vpcs",
  262. Action: PolicyActionList,
  263. Result: rbacutils.Allow,
  264. },
  265. {
  266. Service: api.SERVICE_TYPE,
  267. Resource: "vpcs",
  268. Action: PolicyActionGet,
  269. Result: rbacutils.Allow,
  270. },
  271. {
  272. Service: api.SERVICE_TYPE,
  273. Resource: "wires",
  274. Action: PolicyActionList,
  275. Result: rbacutils.Allow,
  276. },
  277. {
  278. Service: api.SERVICE_TYPE,
  279. Resource: "wires",
  280. Action: PolicyActionGet,
  281. Result: rbacutils.Allow,
  282. },
  283. {
  284. Service: api.SERVICE_TYPE,
  285. Resource: "proxysettings",
  286. Action: PolicyActionList,
  287. Result: rbacutils.Allow,
  288. },
  289. {
  290. Service: api.SERVICE_TYPE,
  291. Resource: "proxysettings",
  292. Action: PolicyActionGet,
  293. Result: rbacutils.Allow,
  294. },
  295. {
  296. Service: api.SERVICE_TYPE,
  297. Resource: "nat_skus",
  298. Action: PolicyActionList,
  299. Result: rbacutils.Allow,
  300. },
  301. {
  302. Service: api.SERVICE_TYPE,
  303. Resource: "nat_skus",
  304. Action: PolicyActionGet,
  305. Result: rbacutils.Allow,
  306. },
  307. {
  308. Service: api.SERVICE_TYPE,
  309. Resource: "nas_skus",
  310. Action: PolicyActionList,
  311. Result: rbacutils.Allow,
  312. },
  313. {
  314. Service: api.SERVICE_TYPE,
  315. Resource: "nas_skus",
  316. Action: PolicyActionGet,
  317. Result: rbacutils.Allow,
  318. },
  319. {
  320. Service: api.SERVICE_TYPE,
  321. Resource: "modelarts_skus",
  322. Action: PolicyActionList,
  323. Result: rbacutils.Allow,
  324. },
  325. {
  326. Service: api.SERVICE_TYPE,
  327. Resource: "modelarts_skus",
  328. Action: PolicyActionGet,
  329. Result: rbacutils.Allow,
  330. },
  331. },
  332. },
  333. {
  334. Auth: true,
  335. Scope: rbacscope.ScopeProject,
  336. Rules: []rbacutils.SRbacRule{
  337. {
  338. Service: api.SERVICE_TYPE,
  339. Resource: "quotas",
  340. Action: PolicyActionGet,
  341. Result: rbacutils.Allow,
  342. },
  343. {
  344. Service: api.SERVICE_TYPE,
  345. Resource: "quotas",
  346. Action: PolicyActionList,
  347. Result: rbacutils.Allow,
  348. },
  349. {
  350. Service: api.SERVICE_TYPE,
  351. Resource: "region_quotas",
  352. Action: PolicyActionGet,
  353. Result: rbacutils.Allow,
  354. },
  355. {
  356. Service: api.SERVICE_TYPE,
  357. Resource: "region_quotas",
  358. Action: PolicyActionList,
  359. Result: rbacutils.Allow,
  360. },
  361. {
  362. Service: api.SERVICE_TYPE,
  363. Resource: "zone_quotas",
  364. Action: PolicyActionGet,
  365. Result: rbacutils.Allow,
  366. },
  367. {
  368. Service: api.SERVICE_TYPE,
  369. Resource: "zone_quotas",
  370. Action: PolicyActionList,
  371. Result: rbacutils.Allow,
  372. },
  373. {
  374. Service: api.SERVICE_TYPE,
  375. Resource: "project_quotas",
  376. Action: PolicyActionGet,
  377. Result: rbacutils.Allow,
  378. },
  379. {
  380. Service: api.SERVICE_TYPE,
  381. Resource: "project_quotas",
  382. Action: PolicyActionList,
  383. Result: rbacutils.Allow,
  384. },
  385. {
  386. Service: api.SERVICE_TYPE,
  387. Resource: "networks",
  388. Action: PolicyActionGet,
  389. Result: rbacutils.Allow,
  390. },
  391. {
  392. Service: api.SERVICE_TYPE,
  393. Resource: "networks",
  394. Action: PolicyActionList,
  395. Result: rbacutils.Allow,
  396. },
  397. },
  398. },
  399. }
  400. )
  401. func Init() {
  402. if consts.IsEnableDefaultPolicy() {
  403. common_policy.AppendDefaultPolicies(predefinedDefaultPolicies)
  404. }
  405. }