##// END OF EJS Templates
permissions: explain better what is inactive duplicate in permissions, sort them to last positions, and make them less visible.
dan -
r4417:524f9e6a default
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,560 +1,566 b''
1 1
2 2 // tables.less
3 3 // For use in RhodeCode application tables;
4 4 // see style guide documentation for guidelines.
5 5
6 6 // TABLES
7 7
8 8 .rctable,
9 9 table.rctable,
10 10 table.dataTable {
11 11 clear:both;
12 12 width: 100%;
13 13 margin: 0 auto @padding;
14 14 padding: 0;
15 15 vertical-align: baseline;
16 16 line-height:1.5em;
17 17 border: none;
18 18 outline: none;
19 19 border-collapse: collapse;
20 20 border-spacing: 0;
21 21 color: @grey2;
22 22
23 23 b {
24 24 font-weight: normal;
25 25 }
26 26
27 27 em {
28 28 font-weight: bold;
29 29 font-style: normal;
30 30 }
31 31
32 32 .td-user {
33 33 .rc-user {
34 34 white-space: nowrap;
35 35 }
36 .user-perm-duplicate {
37 color: @grey4;
38 a {
39 color: @grey4;
40 }
41 }
36 42 }
37 43
38 44 .td-email {
39 45 white-space: nowrap;
40 46 }
41 47
42 48 th,
43 49 td {
44 50 height: auto;
45 51 max-width: 20%;
46 52 padding: .65em 0 .65em 1em;
47 53 vertical-align: middle;
48 54 border-bottom: @border-thickness solid @grey5;
49 55 white-space: normal;
50 56
51 57 &.td-radio,
52 58 &.td-checkbox {
53 59 padding-right: 0;
54 60 text-align: center;
55 61
56 62 input {
57 63 margin: 0 1em;
58 64 }
59 65 }
60 66
61 67 &.truncate-wrap {
62 68 white-space: nowrap !important;
63 69 }
64 70
65 71 pre {
66 72 margin: 0;
67 73 }
68 74
69 75 .show_more {
70 76 height: inherit;
71 77 }
72 78 }
73 79
74 80 .expired td {
75 81 background-color: @grey7;
76 82 }
77 83 .inactive td {
78 84 background-color: @grey6;
79 85 }
80 86 th {
81 87 text-align: left;
82 88 font-weight: @text-semibold-weight;
83 89 font-family: @text-semibold;
84 90 }
85 91
86 92 .hl {
87 93 td {
88 94 background-color: lighten(@alert4,25%);
89 95 }
90 96 }
91 97
92 98 // Special Data Cell Types
93 99 // See style guide for desciptions and examples.
94 100
95 101 td {
96 102
97 103 &.user {
98 104 padding-left: 1em;
99 105 }
100 106
101 107 &.td-rss {
102 108 width: 20px;
103 109 min-width: 0;
104 110 margin: 0;
105 111 }
106 112
107 113 &.quick_repo_menu {
108 114 width: 15px;
109 115 text-align: center;
110 116
111 117 &:hover {
112 118 background-color: @grey5;
113 119 }
114 120 }
115 121
116 122 &.td-icon {
117 123 min-width: 20px;
118 124 width: 20px;
119 125 }
120 126
121 127 &.td-hash {
122 128 min-width: 80px;
123 129 width: 200px;
124 130
125 131 .obsolete {
126 132 text-decoration: line-through;
127 133 color: lighten(@grey2,25%);
128 134 }
129 135 }
130 136
131 137 &.td-sha {
132 138 white-space: nowrap;
133 139 }
134 140
135 141 &.td-graphbox {
136 142 width: 100px;
137 143 max-width: 100px;
138 144 min-width: 100px;
139 145 }
140 146
141 147 &.td-time {
142 148 width: 160px;
143 149 white-space: nowrap;
144 150 }
145 151
146 152 &.annotate{
147 153 padding-right: 0;
148 154
149 155 div.annotatediv{
150 156 margin: 0 0.7em;
151 157 }
152 158 }
153 159
154 160 &.tags-col {
155 161 padding-right: 0;
156 162 }
157 163
158 164 &.td-description {
159 165 min-width: 350px;
160 166
161 167 &.truncate, .truncate-wrap {
162 168 white-space: nowrap;
163 169 overflow: hidden;
164 170 text-overflow: ellipsis;
165 171 max-width: 350px;
166 172 }
167 173 }
168 174
169 175 &.td-grid-name {
170 176 white-space: nowrap;
171 177 min-width: 300px;
172 178 }
173 179
174 180 &.td-componentname {
175 181 white-space: nowrap;
176 182 }
177 183
178 184 &.td-name {
179 185
180 186 }
181 187
182 188 &.td-journalaction {
183 189 min-width: 300px;
184 190
185 191 .journal_action_params {
186 192 // waiting for feedback
187 193 }
188 194 }
189 195
190 196 &.td-active {
191 197 padding-left: .65em;
192 198 }
193 199
194 200 &.td-issue-tracker-name {
195 201 width: 180px;
196 202 input {
197 203 width: 180px;
198 204 }
199 205
200 206 }
201 207
202 208 &.td-issue-tracker-regex {
203 209 white-space: nowrap;
204 210
205 211 min-width: 300px;
206 212 input {
207 213 min-width: 300px;
208 214 }
209 215
210 216 }
211 217
212 218 &.td-url {
213 219 white-space: nowrap;
214 220 }
215 221
216 222 &.td-comments {
217 223 min-width: 3em;
218 224 }
219 225
220 226 &.td-buttons {
221 227 padding: .3em 0;
222 228 }
223 229 &.td-align-top {
224 230 vertical-align: text-top
225 231 }
226 232 &.td-action {
227 233 // this is for the remove/delete/edit buttons
228 234 padding-right: 0;
229 235 min-width: 95px;
230 236 text-transform: capitalize;
231 237
232 238 i {
233 239 display: none;
234 240 }
235 241 }
236 242
237 243 // TODO: lisa: this needs to be cleaned up with the buttons
238 244 .grid_edit,
239 245 .grid_delete {
240 246 display: inline-block;
241 247 margin: 0 @padding/3 0 0;
242 248 font-family: @text-light;
243 249
244 250 i {
245 251 display: none;
246 252 }
247 253 }
248 254
249 255 .grid_edit + .grid_delete {
250 256 border-left: @border-thickness solid @grey5;
251 257 padding-left: @padding/2;
252 258 }
253 259
254 260 &.td-compare {
255 261
256 262 input {
257 263 margin-right: 1em;
258 264 }
259 265
260 266 .compare-radio-button {
261 267 margin: 0 1em 0 0;
262 268 }
263 269
264 270
265 271 }
266 272
267 273 &.td-tags {
268 274 padding: .5em 1em .5em 0;
269 275 width: 140px;
270 276
271 277 .tag {
272 278 margin: 1px;
273 279 float: left;
274 280 }
275 281 }
276 282
277 283 .icon-svn, .icon-hg, .icon-git {
278 284 font-size: 1.4em;
279 285 }
280 286
281 287 &.collapse_commit,
282 288 &.expand_commit {
283 289 padding-right: 0;
284 290 padding-left: 1em;
285 291 cursor: pointer;
286 292 width: 20px;
287 293 }
288 294 }
289 295
290 296 .perm_admin_row {
291 297 color: @grey4;
292 298 background-color: @grey6;
293 299 }
294 300
295 301 .noborder {
296 302 border: none;
297 303
298 304 td {
299 305 border: none;
300 306 }
301 307 }
302 308 }
303 309 .rctable.audit-log {
304 310 td {
305 311 vertical-align: top;
306 312 }
307 313 }
308 314
309 315 // TRUNCATING
310 316 // TODO: lisaq: should this possibly be moved out of tables.less?
311 317 // for truncated text
312 318 // used inside of table cells and in code block headers
313 319 .truncate-wrap {
314 320 white-space: nowrap !important;
315 321
316 322 //truncated text
317 323 .truncate {
318 324 max-width: 450px;
319 325 width: 300px;
320 326 overflow: hidden;
321 327 text-overflow: ellipsis;
322 328 -o-text-overflow: ellipsis;
323 329 -ms-text-overflow: ellipsis;
324 330
325 331 &.autoexpand {
326 332 width: 120px;
327 333 margin-right: 200px;
328 334 }
329 335 }
330 336 &:hover .truncate.autoexpand {
331 337 overflow: visible;
332 338 }
333 339
334 340 .tags-truncate {
335 341 width: 150px;
336 342 height: 22px;
337 343 overflow: hidden;
338 344
339 345 .tag {
340 346 display: inline-block;
341 347 }
342 348
343 349 &.truncate {
344 350 height: 22px;
345 351 max-height:2em;
346 352 width: 140px;
347 353 }
348 354 }
349 355 }
350 356
351 357 .apikeys_wrap {
352 358 margin-bottom: @padding;
353 359
354 360 table.rctable td:first-child {
355 361 width: 120px;
356 362 }
357 363 }
358 364
359 365
360 366
361 367 // SPECIAL CASES
362 368
363 369 // Repository Followers
364 370 table.rctable.followers_data {
365 371 width: 75%;
366 372 margin: 0;
367 373 }
368 374
369 375 // Repository List
370 376 // Group Members List
371 377 table.rctable.group_members,
372 378 table#repo_list_table {
373 379 min-width: 600px;
374 380 }
375 381
376 382 #no_grid_data {
377 383 text-align: center;
378 384 }
379 385
380 386 #grid_data_loading {
381 387 text-align: center;
382 388 font-weight: 600;
383 389 font-size: 16px;
384 390 padding: 80px 20px;
385 391 }
386 392
387 393 // Keyboard mappings
388 394 table.keyboard-mappings {
389 395 th {
390 396 text-align: left;
391 397 font-weight: @text-semibold-weight;
392 398 font-family: @text-semibold;
393 399 }
394 400 }
395 401
396 402 // Branches, Tags, and Bookmarks
397 403 #obj_list_table.dataTable {
398 404 td.td-time {
399 405 padding-right: 1em;
400 406 }
401 407 }
402 408
403 409 // User Admin
404 410 .rctable.useremails,
405 411 .rctable.account_emails {
406 412 .tag,
407 413 .btn {
408 414 float: right;
409 415 }
410 416 .btn { //to line up with tags
411 417 margin-right: 1.65em;
412 418 }
413 419 }
414 420
415 421 // User List
416 422 #user_list_table {
417 423
418 424 td.td-user {
419 425 min-width: 100px;
420 426 }
421 427 }
422 428
423 429 // Pull Request List Table
424 430 #pull_request_list_table.dataTable {
425 431
426 432 //TODO: lisa: This needs to be removed once the description is adjusted
427 433 // for using an expand_commit button (see issue 765)
428 434 td {
429 435 vertical-align: middle;
430 436 }
431 437 }
432 438
433 439 // Settings (no border)
434 440 table.rctable.dl-settings {
435 441 td {
436 442 border: none;
437 443 vertical-align: baseline;
438 444 }
439 445 }
440 446
441 447
442 448 // Statistics
443 449 table.trending_language_tbl {
444 450 width: 100%;
445 451 line-height: 1em;
446 452
447 453 td div {
448 454 overflow: visible;
449 455 }
450 456 }
451 457
452 458 .trending_language_tbl, .trending_language_tbl td {
453 459 border: 0;
454 460 margin: 0;
455 461 padding: 0;
456 462 background: transparent;
457 463 }
458 464
459 465 .trending_language_tbl, .trending_language_tbl tr {
460 466 border-spacing: 0 3px;
461 467 }
462 468
463 469 .trending_language {
464 470 position: relative;
465 471 overflow: hidden;
466 472 color: @text-color;
467 473 width: 400px;
468 474
469 475 .lang-bar {
470 476 z-index: 1;
471 477 overflow: hidden;
472 478 background-color: @rcblue;
473 479 color: #FFF;
474 480 text-decoration: none;
475 481 }
476 482
477 483 }
478 484
479 485 // Changesets
480 486 #changesets.rctable {
481 487 th {
482 488 padding: 0 1em 0.65em 0;
483 489 }
484 490
485 491 // td must be fixed height for graph
486 492 td {
487 493 height: 32px;
488 494 padding: 0 1em 0 0;
489 495 vertical-align: middle;
490 496 white-space: nowrap;
491 497
492 498 &.td-description {
493 499 white-space: normal;
494 500 }
495 501
496 502 &.expand_commit {
497 503 padding-right: 0;
498 504 cursor: pointer;
499 505 width: 20px;
500 506 }
501 507 }
502 508 }
503 509
504 510 // Compare
505 511 table.compare_view_commits {
506 512 margin-top: @space;
507 513
508 514 td.td-time {
509 515 padding-left: .5em;
510 516 }
511 517
512 518 // special case to not show hover actions on hidden indicator
513 519 tr.compare_select_hidden:hover {
514 520 cursor: inherit;
515 521
516 522 td {
517 523 background-color: inherit;
518 524 }
519 525 }
520 526
521 527 tr:hover {
522 528 cursor: pointer;
523 529
524 530 td {
525 531 background-color: lighten(@alert4,25%);
526 532 }
527 533 }
528 534
529 535
530 536 }
531 537
532 538 .file_history {
533 539 td.td-actions {
534 540 text-align: right;
535 541 }
536 542 }
537 543
538 544
539 545 // Gist List
540 546 #gist_list_table {
541 547 td {
542 548 vertical-align: middle;
543 549
544 550 div{
545 551 display: inline-block;
546 552 vertical-align: middle;
547 553 }
548 554
549 555 img{
550 556 vertical-align: middle;
551 557 }
552 558
553 559 &.td-expire {
554 560 width: 200px;
555 561 }
556 562 &.td-gist-type {
557 563 width: 100px;
558 564 }
559 565 }
560 566 }
@@ -1,230 +1,240 b''
1 1 <%namespace name="base" file="/base/base.mako"/>
2 2
3 3 <div class="panel panel-default">
4 4 <div class="panel-heading">
5 5 <h3 class="panel-title">${_('Repository Group Permissions: {}').format(c.repo_group.name)}</h3>
6 6 </div>
7 7 <div class="panel-body">
8 8 ${h.secure_form(h.route_path('edit_repo_group_perms_update', repo_group_name=c.repo_group.group_name), request=request)}
9 9 <table id="permissions_manage" class="rctable permissions">
10 10 <tr>
11 11 <th class="td-radio">${_('None')}</th>
12 12 <th class="td-radio">${_('Read')}</th>
13 13 <th class="td-radio">${_('Write')}</th>
14 14 <th class="td-radio">${_('Admin')}</th>
15 15 <th class="td-owner">${_('User/User Group')}</th>
16 16 <th class="td-action"></th>
17 17 <th class="td-action"></th>
18 18 </tr>
19 19 ## USERS
20 20 %for _user in c.repo_group.permissions():
21 21 ## super admin/owner row
22 22 %if getattr(_user, 'admin_row', None) or getattr(_user, 'owner_row', None):
23 23 <tr class="perm_admin_row">
24 24 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.none', disabled="disabled")}</td>
25 25 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.read', disabled="disabled")}</td>
26 26 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.write', disabled="disabled")}</td>
27 27 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.admin', 'repository.admin', disabled="disabled")}</td>
28 28 <td class="td-user">
29 29 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
30 30 ${h.link_to_user(_user.username)}
31 31 %if getattr(_user, 'admin_row', None):
32 32 (${_('super-admin')})
33 33 %endif
34 34 %if getattr(_user, 'owner_row', None):
35 35 (${_('owner')})
36 36 %endif
37 37 </td>
38 38 <td></td>
39 39 <td class="quick_repo_menu">
40 40 % if c.rhodecode_user.is_admin:
41 41 <i class="icon-more"></i>
42 42 <div class="menu_items_container" style="display: none;">
43 43 <ul class="menu_items">
44 44 <li>
45 45 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-groups-permissions'))}
46 46 </li>
47 47 </ul>
48 48 </div>
49 49 % endif
50 50 </td>
51 51 </tr>
52 52 %else:
53 53 <tr>
54 54 ##forbid revoking permission from yourself, except if you're an super admin
55 55 %if c.rhodecode_user.user_id != _user.user_id or c.rhodecode_user.is_admin:
56 56 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'group.none', checked=_user.permission=='group.none')}</td>
57 57 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'group.read', checked=_user.permission=='group.read')}</td>
58 58 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'group.write', checked=_user.permission=='group.write')}</td>
59 59 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'group.admin', checked=_user.permission=='group.admin')}</td>
60 60 <td class="td-user">
61 61 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
62 62 <span class="user">
63 63 % if _user.username == h.DEFAULT_USER:
64 64 ${h.DEFAULT_USER}
65 65 % if _user.active:
66 66 <span class="user-perm-help-text"> - ${_('permission for other logged in and anonymous users')}</span>
67 67 % else:
68 68 <span class="user-perm-help-text"> - ${_('permission for other logged in users')}</span>
69 69 % endif
70 70 % else:
71 ${h.link_to_user(_user.username)}
72 %if getattr(_user, 'duplicate_perm', None):
73 (${_('inactive duplicate')})
74 %endif
71 % if getattr(_user, 'duplicate_perm', None):
72 <span class="user-perm-duplicate">
73 ${h.link_to_user(_user.username)}
74 <span class="tooltip" title="${_('This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually.')}">(${_('inactive duplicate')})
75 </span>
76 </span>
77 % else:
78 ${h.link_to_user(_user.username)}
79 % endif
75 80 % endif
76 81 </span>
77 82 </td>
78 83 <td class="td-action">
79 84 %if _user.username != h.DEFAULT_USER:
80 85 <span class="btn btn-link btn-danger revoke_perm"
81 86 member="${_user.user_id}" member_type="user">
82 87 ${_('Remove')}
83 88 </span>
84 89 %endif
85 90 </td>
86 91 <td class="quick_repo_menu">
87 92 % if c.rhodecode_user.is_admin:
88 93 <i class="icon-more"></i>
89 94 <div class="menu_items_container" style="display: none;">
90 95 <ul class="menu_items">
91 96 <li>
92 97 % if _user.username == h.DEFAULT_USER:
93 98 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-groups-permissions'))}
94 99 % else:
95 100 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-groups-permissions'))}
96 101 % endif
97 102 </li>
98 103 </ul>
99 104 </div>
100 105 % endif
101 106 </td>
102 107 %else:
103 108 ## special case for currently logged-in user permissions, we make sure he cannot take his own permissions
104 109 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'group.none', disabled="disabled")}</td>
105 110 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'group.read', disabled="disabled")}</td>
106 111 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'group.write', disabled="disabled")}</td>
107 112 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'group.admin', disabled="disabled")}</td>
108 113 <td class="td-user">
109 114 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
110 115 <span class="user">
111 116 % if _user.username == h.DEFAULT_USER:
112 117 ${h.DEFAULT_USER}
113 118 % if _user.active:
114 119 <span class="user-perm-help-text"> - ${_('permission for other logged in and anonymous users')}</span>
115 120 % else:
116 121 <span class="user-perm-help-text"> - ${_('permission for other logged in users')}</span>
117 122 % endif
118 123 % else:
119 ${h.link_to_user(_user.username)}
120 %if getattr(_user, 'duplicate_perm', None):
121 (${_('inactive duplicate')})
122 %endif
124 % if getattr(_user, 'duplicate_perm', None):
125 <span class="user-perm-duplicate">
126 ${h.link_to_user(_user.username)}
127 <span class="tooltip" title="${_('This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually.')}">(${_('inactive duplicate')})
128 </span>
129 </span>
130 % else:
131 ${h.link_to_user(_user.username)}
132 % endif
123 133 % endif
124 134 <span class="user-perm-help-text">(${_('delegated admin')})</span>
125 135 </span>
126 136 </td>
127 137 <td></td>
128 138 <td class="quick_repo_menu">
129 139 % if c.rhodecode_user.is_admin:
130 140 <i class="icon-more"></i>
131 141 <div class="menu_items_container" style="display: none;">
132 142 <ul class="menu_items">
133 143 <li>
134 144 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-groups-permissions'))}
135 145 </li>
136 146 </ul>
137 147 </div>
138 148 % endif
139 149 </td>
140 150 %endif
141 151 </tr>
142 152 %endif
143 153 %endfor
144 154
145 155 ## USER GROUPS
146 156 %for _user_group in c.repo_group.permission_user_groups(with_members=True):
147 157 <tr id="id${id(_user_group.users_group_name)}">
148 158 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'group.none', checked=_user_group.permission=='group.none')}</td>
149 159 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'group.read', checked=_user_group.permission=='group.read')}</td>
150 160 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'group.write', checked=_user_group.permission=='group.write')}</td>
151 161 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'group.admin', checked=_user_group.permission=='group.admin')}</td>
152 162 <td class="td-componentname">
153 163 ${base.user_group_icon(_user_group, tooltip=True)}
154 164
155 165 %if c.is_super_admin:
156 166 <a href="${h.route_path('edit_user_group',user_group_id=_user_group.users_group_id)}">
157 167 ${_user_group.users_group_name}
158 168 </a>
159 169 %else:
160 170 ${h.link_to_group(_user_group.users_group_name)}
161 171 %endif
162 172 (${_('members')}: ${len(_user_group.members)})
163 173 </td>
164 174 <td class="td-action">
165 175 <span class="btn btn-link btn-danger revoke_perm"
166 176 member="${_user_group.users_group_id}" member_type="user_group">
167 177 ${_('Remove')}
168 178 </span>
169 179 </td>
170 180 <td class="quick_repo_menu">
171 181 % if c.rhodecode_user.is_admin:
172 182 <i class="icon-more"></i>
173 183 <div class="menu_items_container" style="display: none;">
174 184 <ul class="menu_items">
175 185 <li>
176 186 ${h.link_to('show permissions', h.route_path('edit_user_group_perms_summary', user_group_id=_user_group.users_group_id, _anchor='repositories-groups-permissions'))}
177 187 </li>
178 188 </ul>
179 189 </div>
180 190 % endif
181 191 </td>
182 192 </tr>
183 193 %endfor
184 194
185 195 <tr class="new_members" id="add_perm_input"></tr>
186 196 <tr>
187 197 <td></td>
188 198 <td></td>
189 199 <td></td>
190 200 <td></td>
191 201 <td></td>
192 202 <td>
193 203 <span id="add_perm" class="link">
194 204 ${_('Add user/user group')}
195 205 </span>
196 206 </td>
197 207 <td></td>
198 208 </tr>
199 209 </table>
200 210
201 211 <div class="fields">
202 212 <div class="field">
203 213 <div class="label label-radio">
204 214 ${_('Apply to children')}:
205 215 </div>
206 216 <div class="radios">
207 217 ${h.radio('recursive', 'none', label=_('None'), checked="checked")}
208 218 ${h.radio('recursive', 'groups', label=_('Repository Groups'))}
209 219 ${h.radio('recursive', 'repos', label=_('Repositories'))}
210 220 ${h.radio('recursive', 'all', label=_('Both'))}
211 221 <span class="help-block">${_('Set or revoke permissions to selected types of children of this group, including non-private repositories and other groups if chosen.')}</span>
212 222 </div>
213 223 </div>
214 224 </div>
215 225 <div class="buttons">
216 226 ${h.submit('save',_('Save'),class_="btn btn-primary")}
217 227 ${h.reset('reset',_('Reset'),class_="btn btn-danger")}
218 228 </div>
219 229 ${h.end_form()}
220 230 </div>
221 231 </div>
222 232 <script type="text/javascript">
223 233 $('#add_perm').on('click', function(e){
224 234 addNewPermInput($(this), 'group');
225 235 });
226 236 $('.revoke_perm').on('click', function(e){
227 237 markRevokePermInput($(this), 'group');
228 238 });
229 239 quick_repo_menu();
230 240 </script>
@@ -1,239 +1,245 b''
1 1 <%namespace name="base" file="/base/base.mako"/>
2 2
3 3 <div class="panel panel-default">
4 4 <div class="panel-heading">
5 5 <h3 class="panel-title">${_('Repository Access Permissions')}</h3>
6 6 </div>
7 7 <div class="panel-body">
8 8 ${h.secure_form(h.route_path('edit_repo_perms', repo_name=c.repo_name), request=request)}
9 9 <table id="permissions_manage" class="rctable permissions">
10 10 <tr>
11 11 <th class="td-radio">${_('None')}</th>
12 12 <th class="td-radio">${_('Read')}</th>
13 13 <th class="td-radio">${_('Write')}</th>
14 14 <th class="td-radio">${_('Admin')}</th>
15 15 <th class="td-owner">${_('User/User Group')}</th>
16 16 <th class="td-action"></th>
17 17 <th class="td-action"></th>
18 18 </tr>
19 19 ## USERS
20 20 %for _user in c.rhodecode_db_repo.permissions():
21 21 %if getattr(_user, 'admin_row', None) or getattr(_user, 'owner_row', None):
22 22 <tr class="perm_admin_row">
23 23 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.none', disabled="disabled")}</td>
24 24 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.read', disabled="disabled")}</td>
25 25 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.write', disabled="disabled")}</td>
26 26 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.admin', 'repository.admin', disabled="disabled")}</td>
27 27 <td class="td-user">
28 28 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
29 29 ${h.link_to_user(_user.username)}
30 30 %if getattr(_user, 'admin_row', None):
31 31 (${_('super-admin')})
32 32 %endif
33 33 %if getattr(_user, 'owner_row', None):
34 34 (${_('owner')})
35 35 %endif
36 36 </td>
37 37 <td></td>
38 38 <td class="quick_repo_menu">
39 39 % if c.rhodecode_user.is_admin:
40 40 <i class="icon-more"></i>
41 41 <div class="menu_items_container" style="display: none;">
42 42 <ul class="menu_items">
43 43 <li>
44 44 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-permissions'))}
45 45 </li>
46 46 </ul>
47 47 </div>
48 48 % endif
49 49 </td>
50 50 </tr>
51 51 %elif _user.username == h.DEFAULT_USER and c.rhodecode_db_repo.private:
52 52 <tr>
53 53 <td colspan="4">
54 54 <span class="private_repo_msg">
55 55 <strong title="${h.tooltip(_user.permission)}">${_('private repository')}</strong>
56 56 </span>
57 57 </td>
58 58 <td class="private_repo_msg">
59 59 ${base.gravatar(h.DEFAULT_USER_EMAIL, 16)}
60 60 ${h.DEFAULT_USER} - ${_('only users/user groups explicitly added here will have access')}</td>
61 61 <td class="td-action">
62 62 <span class="noselect tooltip btn btn-link btn-default" onclick="setPrivateRepo(this, false); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply')}">
63 63 ${_('un-set private mode')}
64 64 </span>
65 65 </td>
66 66 <td class="quick_repo_menu">
67 67 % if c.rhodecode_user.is_admin:
68 68 <i class="icon-more"></i>
69 69 <div class="menu_items_container" style="display: none;">
70 70 <ul class="menu_items">
71 71 <li>
72 72 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-permissions'))}
73 73 </li>
74 74 </ul>
75 75 </div>
76 76 % endif
77 77 </td>
78 78 </tr>
79 79 %else:
80 80 <% used_by_n_rules = len(getattr(_user, 'branch_rules', None) or []) %>
81 81 <tr>
82 82 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.none', checked=_user.permission=='repository.none', disabled="disabled" if (used_by_n_rules and _user.username != h.DEFAULT_USER) else None)}</td>
83 83 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.read', checked=_user.permission=='repository.read', disabled="disabled" if (used_by_n_rules and _user.username != h.DEFAULT_USER) else None)}</td>
84 84 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.write', checked=_user.permission=='repository.write')}</td>
85 85 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'repository.admin', checked=_user.permission=='repository.admin')}</td>
86 86 <td class="td-user">
87 87 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
88 88 <span class="user">
89 89 % if _user.username == h.DEFAULT_USER:
90 90 ${h.DEFAULT_USER}
91 91 % if _user.active:
92 92 <span class="user-perm-help-text"> - ${_('permission for other logged in and anonymous users')}</span>
93 93 % else:
94 94 <span class="user-perm-help-text"> - ${_('permission for other logged in users')}</span>
95 95 % endif
96 96 % else:
97 ${h.link_to_user(_user.username)}
98 %if getattr(_user, 'duplicate_perm', None):
99 (${_('inactive duplicate')})
100 %endif
97 % if getattr(_user, 'duplicate_perm', None):
98 <span class="user-perm-duplicate">
99 ${h.link_to_user(_user.username)}
100 <span class="tooltip" title="${_('This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually.')}">(${_('inactive duplicate')})
101 </span>
102 </span>
103 % else:
104 ${h.link_to_user(_user.username)}
105 % endif
106
101 107 %if getattr(_user, 'branch_rules', None):
102 108 % if used_by_n_rules == 1:
103 109 (${_('used by {} branch rule, requires write+ permissions').format(used_by_n_rules)})
104 110 % else:
105 111 (${_('used by {} branch rules, requires write+ permissions').format(used_by_n_rules)})
106 112 % endif
107 113 %endif
108 114 % endif
109 115 </span>
110 116 </td>
111 117 <td class="td-action">
112 118 %if _user.username != h.DEFAULT_USER and getattr(_user, 'branch_rules', None) is None:
113 119 <span class="btn btn-link btn-danger revoke_perm"
114 120 member="${_user.user_id}" member_type="user">
115 121 ${_('Remove')}
116 122 </span>
117 123 %elif _user.username == h.DEFAULT_USER:
118 124 <span class="noselect tooltip btn btn-link btn-default" onclick="setPrivateRepo(this, true); return false" title="${_('Private repositories are only visible to people explicitly added as collaborators. Default permissions wont apply')}">
119 125 ${_('set private mode')}
120 126 </span>
121 127 %endif
122 128 </td>
123 129 <td class="quick_repo_menu">
124 130 % if c.rhodecode_user.is_admin:
125 131 <i class="icon-more"></i>
126 132 <div class="menu_items_container" style="display: none;">
127 133 <ul class="menu_items">
128 134 <li>
129 135 % if _user.username == h.DEFAULT_USER:
130 136 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='repositories-permissions'))}
131 137 % else:
132 138 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='repositories-permissions'))}
133 139 % endif
134 140 </li>
135 141 </ul>
136 142 </div>
137 143 % endif
138 144 </td>
139 145 </tr>
140 146 %endif
141 147 %endfor
142 148
143 149 ## USER GROUPS
144 150 %for _user_group in c.rhodecode_db_repo.permission_user_groups(with_members=True):
145 151 <tr>
146 152 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.none', checked=_user_group.permission=='repository.none')}</td>
147 153 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.read', checked=_user_group.permission=='repository.read')}</td>
148 154 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.write', checked=_user_group.permission=='repository.write')}</td>
149 155 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'repository.admin', checked=_user_group.permission=='repository.admin')}</td>
150 156 <td class="td-componentname">
151 157 ${base.user_group_icon(_user_group, tooltip=True)}
152 158 %if c.is_super_admin:
153 159 <a href="${h.route_path('edit_user_group',user_group_id=_user_group.users_group_id)}">
154 160 ${_user_group.users_group_name}
155 161 </a>
156 162 %else:
157 163 ${h.link_to_group(_user_group.users_group_name)}
158 164 %endif
159 165 (${_('members')}: ${len(_user_group.members)})
160 166 </td>
161 167 <td class="td-action">
162 168 <span class="btn btn-link btn-danger revoke_perm"
163 169 member="${_user_group.users_group_id}" member_type="user_group">
164 170 ${_('Remove')}
165 171 </span>
166 172 </td>
167 173 <td class="quick_repo_menu">
168 174 % if c.rhodecode_user.is_admin:
169 175 <i class="icon-more"></i>
170 176 <div class="menu_items_container" style="display: none;">
171 177 <ul class="menu_items">
172 178 <li>
173 179 ${h.link_to('show permissions', h.route_path('edit_user_group_perms_summary', user_group_id=_user_group.users_group_id, _anchor='repositories-permissions'))}
174 180 </li>
175 181 </ul>
176 182 </div>
177 183 % endif
178 184 </td>
179 185 </tr>
180 186 %endfor
181 187 <tr class="new_members" id="add_perm_input"></tr>
182 188
183 189 <tr>
184 190 <td></td>
185 191 <td></td>
186 192 <td></td>
187 193 <td></td>
188 194 <td></td>
189 195 <td>
190 196 <span id="add_perm" class="link">
191 197 ${_('Add user/user group')}
192 198 </span>
193 199 </td>
194 200 <td></td>
195 201 </tr>
196 202
197 203 </table>
198 204
199 205 <div class="buttons">
200 206 ${h.submit('save',_('Save'),class_="btn btn-primary")}
201 207 ${h.reset('reset',_('Reset'),class_="btn btn-danger")}
202 208 </div>
203 209 ${h.end_form()}
204 210 </div>
205 211 </div>
206 212
207 213 <script type="text/javascript">
208 214 $('#add_perm').on('click', function(e){
209 215 addNewPermInput($(this), 'repository');
210 216 });
211 217 $('.revoke_perm').on('click', function(e){
212 218 markRevokePermInput($(this), 'repository');
213 219 });
214 220 quick_repo_menu();
215 221
216 222 var setPrivateRepo = function (elem, private) {
217 223 var $elem = $(elem)
218 224 if ($elem.hasClass('disabled')) {
219 225 return
220 226 }
221 227 $elem.addClass('disabled');
222 228 $elem.css({"opacity": 0.3})
223 229
224 230 var postData = {
225 231 'csrf_token': CSRF_TOKEN,
226 232 'private': private
227 233 };
228 234
229 235 var success = function(o) {
230 236 var defaultUrl = pyroutes.url('edit_repo_perms', {"repo_name": templateContext.repo_name});
231 237 window.location = o.redirect_url || defaultUrl;
232 238 };
233 239
234 240 ajaxPOST(
235 241 pyroutes.url('edit_repo_perms_set_private', {"repo_name": templateContext.repo_name}),
236 242 postData,
237 243 success);
238 244 }
239 245 </script>
@@ -1,221 +1,231 b''
1 1 <%namespace name="base" file="/base/base.mako"/>
2 2
3 3 <div class="panel panel-default">
4 4 <div class="panel-heading">
5 5 <h3 class="panel-title">
6 6 <i class="icon-user-group" title="${_('User group')}"></i>
7 7 ${h.link_to_group(c.user_group.users_group_name)}
8 8 - ${_('Access Permissions')}
9 9 </h3>
10 10 </div>
11 11 <div class="panel-body">
12 12 ${h.secure_form(h.route_path('edit_user_group_perms_update', user_group_id=c.user_group.users_group_id), request=request)}
13 13 <table id="permissions_manage" class="rctable permissions">
14 14 <tr>
15 15 <th class="td-radio">${_('None')}</th>
16 16 <th class="td-radio">${_('Read')}</th>
17 17 <th class="td-radio">${_('Write')}</th>
18 18 <th class="td-radio">${_('Admin')}</th>
19 19 <th>${_('User/User Group')}</th>
20 20 <th class="td-action"></th>
21 21 <th class="td-action"></th>
22 22 </tr>
23 23 ## USERS
24 24 %for _user in c.user_group.permissions():
25 25 ## super admin/owner row
26 26 %if getattr(_user, 'admin_row', None) or getattr(_user, 'owner_row', None):
27 27 <tr class="perm_admin_row">
28 28 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.none', disabled="disabled")}</td>
29 29 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.read', disabled="disabled")}</td>
30 30 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.write', disabled="disabled")}</td>
31 31 <td class="td-radio">${h.radio('admin_perm_%s' % _user.user_id,'repository.admin', 'repository.admin', disabled="disabled")}</td>
32 32 <td class="td-user">
33 33 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
34 34 <span class="user">
35 35 ${h.link_to_user(_user.username)}
36 36 %if getattr(_user, 'admin_row', None):
37 37 (${_('super-admin')})
38 38 %endif
39 39 %if getattr(_user, 'owner_row', None):
40 40 (${_('owner')})
41 41 %endif
42 42 </span>
43 43 </td>
44 44 <td></td>
45 45 <td class="quick_repo_menu">
46 46 % if c.rhodecode_user.is_admin:
47 47 <i class="icon-more"></i>
48 48 <div class="menu_items_container" style="display: none;">
49 49 <ul class="menu_items">
50 50 <li>
51 51 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='user-groups-permissions'))}
52 52 </li>
53 53 </ul>
54 54 </div>
55 55 % endif
56 56 </td>
57 57 </tr>
58 58 %else:
59 59 ##forbid revoking permission from yourself, except if you're an super admin
60 60 <tr>
61 61 %if c.rhodecode_user.user_id != _user.user_id or c.rhodecode_user.is_admin:
62 62 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'usergroup.none')}</td>
63 63 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'usergroup.read')}</td>
64 64 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'usergroup.write')}</td>
65 65 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'usergroup.admin')}</td>
66 66 <td class="td-user">
67 67 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
68 68 <span class="user">
69 69 % if _user.username == h.DEFAULT_USER:
70 70 ${h.DEFAULT_USER}
71 71 % if _user.active:
72 72 <span class="user-perm-help-text"> - ${_('permission for other logged in and anonymous users')}</span>
73 73 % else:
74 74 <span class="user-perm-help-text"> - ${_('permission for other logged in users')}</span>
75 75 % endif
76 76 % else:
77 ${h.link_to_user(_user.username)}
78 %if getattr(_user, 'duplicate_perm', None):
79 (${_('inactive duplicate')})
80 %endif
77 % if getattr(_user, 'duplicate_perm', None):
78 <span class="user-perm-duplicate">
79 ${h.link_to_user(_user.username)}
80 <span class="tooltip" title="${_('This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually.')}">(${_('inactive duplicate')})
81 </span>
82 </span>
83 % else:
84 ${h.link_to_user(_user.username)}
85 % endif
81 86 % endif
82 87 </span>
83 88 </td>
84 89 <td class="td-action">
85 90 %if _user.username != h.DEFAULT_USER:
86 91 <span class="btn btn-link btn-danger revoke_perm"
87 92 member="${_user.user_id}" member_type="user">
88 93 ${_('Remove')}
89 94 </span>
90 95 %endif
91 96 </td>
92 97 <td class="quick_repo_menu">
93 98 % if c.rhodecode_user.is_admin:
94 99 <i class="icon-more"></i>
95 100 <div class="menu_items_container" style="display: none;">
96 101 <ul class="menu_items">
97 102 <li>
98 103 % if _user.username == h.DEFAULT_USER:
99 104 ${h.link_to('show permissions', h.route_path('admin_permissions_overview', _anchor='user-groups-permissions'))}
100 105 % else:
101 106 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='user-groups-permissions'))}
102 107 % endif
103 108 </li>
104 109 </ul>
105 110 </div>
106 111 % endif
107 112 </td>
108 113 %else:
109 114 ## special case for currently logged-in user permissions, we make sure he cannot take his own permissions
110 115 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'usergroup.none', disabled="disabled")}</td>
111 116 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'usergroup.read', disabled="disabled")}</td>
112 117 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'usergroup.write', disabled="disabled")}</td>
113 118 <td class="td-radio">${h.radio('u_perm_%s' % _user.user_id,'usergroup.admin', disabled="disabled")}</td>
114 119 <td class="td-user">
115 120 ${base.gravatar(_user.email, 16, user=_user, tooltip=True)}
116 121 <span class="user">
117 122 % if _user.username == h.DEFAULT_USER:
118 123 ${h.DEFAULT_USER}
119 124 % if _user.active:
120 125 <span class="user-perm-help-text"> - ${_('permission for other logged in and anonymous users')}</span>
121 126 % else:
122 127 <span class="user-perm-help-text"> - ${_('permission for other logged in users')}</span>
123 128 % endif
124 129 % else:
125 ${h.link_to_user(_user.username)}
126 %if getattr(_user, 'duplicate_perm', None):
127 (${_('inactive duplicate')})
128 %endif
130 % if getattr(_user, 'duplicate_perm', None):
131 <span class="user-perm-duplicate">
132 ${h.link_to_user(_user.username)}
133 <span class="tooltip" title="${_('This entry is a duplicate, most probably left-over from previously set permission. This user has a higher permission set, so this entry is inactive. Please revoke this permission manually.')}">(${_('inactive duplicate')})
134 </span>
135 </span>
136 % else:
137 ${h.link_to_user(_user.username)}
138 % endif
129 139 % endif
130 140 <span class="user-perm-help-text">(${_('delegated admin')})</span>
131 141 </span>
132 142 </td>
133 143 <td></td>
134 144 <td class="quick_repo_menu">
135 145 % if c.rhodecode_user.is_admin:
136 146 <i class="icon-more"></i>
137 147 <div class="menu_items_container" style="display: none;">
138 148 <ul class="menu_items">
139 149 <li>
140 150 ${h.link_to('show permissions', h.route_path('edit_user_perms_summary', user_id=_user.user_id, _anchor='user-groups-permissions'))}
141 151 </li>
142 152 </ul>
143 153 </div>
144 154 % endif
145 155 </td>
146 156 %endif
147 157 </tr>
148 158 %endif
149 159 %endfor
150 160
151 161 ## USER GROUPS
152 162 %for _user_group in c.user_group.permission_user_groups(with_members=True):
153 163 <tr>
154 164 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'usergroup.none')}</td>
155 165 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'usergroup.read')}</td>
156 166 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'usergroup.write')}</td>
157 167 <td class="td-radio">${h.radio('g_perm_%s' % _user_group.users_group_id,'usergroup.admin')}</td>
158 168 <td class="td-user">
159 169 <i class="icon-user-group"></i>
160 170 %if c.is_super_admin:
161 171 <a href="${h.route_path('edit_user_group',user_group_id=_user_group.users_group_id)}">
162 172 ${_user_group.users_group_name}
163 173 </a>
164 174 %else:
165 175 ${h.link_to_group(_user_group.users_group_name)}
166 176 %endif
167 177 (${_('members')}: ${len(_user_group.members)})
168 178 </td>
169 179 <td class="td-action">
170 180 <span class="btn btn-link btn-danger revoke_perm"
171 181 member="${_user_group.users_group_id}" member_type="user_group">
172 182 ${_('Remove')}
173 183 </span>
174 184 </td>
175 185 <td class="quick_repo_menu">
176 186 % if c.rhodecode_user.is_admin:
177 187 <i class="icon-more"></i>
178 188 <div class="menu_items_container" style="display: none;">
179 189 <ul class="menu_items">
180 190 <li>
181 191 ${h.link_to('show permissions', h.route_path('edit_user_group_perms_summary', user_group_id=_user_group.users_group_id, _anchor='user-groups-permissions'))}
182 192 </li>
183 193 </ul>
184 194 </div>
185 195 % endif
186 196 </td>
187 197 </tr>
188 198 %endfor
189 199 <tr class="new_members" id="add_perm_input"></tr>
190 200 <tr>
191 201 <td></td>
192 202 <td></td>
193 203 <td></td>
194 204 <td></td>
195 205 <td></td>
196 206 <td>
197 207 <span id="add_perm" class="link">
198 208 ${_('Add user/user group')}
199 209 </span>
200 210 </td>
201 211 <td></td>
202 212 </tr>
203 213 </table>
204 214
205 215 <div class="buttons">
206 216 ${h.submit('save',_('Save'),class_="btn btn-primary")}
207 217 ${h.reset('reset',_('Reset'),class_="btn btn-danger")}
208 218 </div>
209 219 ${h.end_form()}
210 220 </div>
211 221 </div>
212 222
213 223 <script type="text/javascript">
214 224 $('#add_perm').on('click', function(e){
215 225 addNewPermInput($(this), 'usergroup');
216 226 });
217 227 $('.revoke_perm').on('click', function(e){
218 228 markRevokePermInput($(this), 'usergroup');
219 229 });
220 230 quick_repo_menu()
221 231 </script>
General Comments 0
You need to be logged in to leave comments. Login now