give_acl.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. from .tool.func import *
  2. def give_acl_2(name):
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. check_ok = ''
  6. ip = ip_check()
  7. if flask.request.method == 'POST':
  8. check_data = 'acl (' + name + ')'
  9. else:
  10. check_data = None
  11. user_data = re.search(r'^user:(.+)$', name)
  12. if user_data:
  13. if check_data and ip_or_user(ip) != 0:
  14. return redirect('/login')
  15. if user_data.group(1) != ip_check():
  16. if admin_check(5) != 1:
  17. if check_data:
  18. return re_error('/error/3')
  19. else:
  20. check_ok = 'disabled'
  21. else:
  22. if admin_check(5) != 1:
  23. if check_data:
  24. return re_error('/error/3')
  25. else:
  26. check_ok = 'disabled'
  27. if flask.request.method == 'POST':
  28. acl_data = [['decu', flask.request.form.get('decu', '')]]
  29. acl_data += [['document_edit_acl', flask.request.form.get('document_edit_acl', '')]]
  30. acl_data += [['document_move_acl', flask.request.form.get('document_move_acl', '')]]
  31. acl_data += [['document_delete_acl', flask.request.form.get('document_delete_acl', '')]]
  32. acl_data += [['dis', flask.request.form.get('dis', '')]]
  33. acl_data += [['view', flask.request.form.get('view', '')]]
  34. acl_data += [['why', flask.request.form.get('why', '')]]
  35. curs.execute(db_change("select title from acl where title = ?"), [name])
  36. if curs.fetchall():
  37. for i in acl_data:
  38. curs.execute(db_change("update acl set data = ? where title = ? and type = ?"), [i[1], name, i[0]])
  39. else:
  40. for i in acl_data:
  41. curs.execute(db_change("insert into acl (title, data, type) values (?, ?, ?)"), [name, i[1], i[0]])
  42. all_d = ''
  43. for i in ['decu', 'document_edit_acl', 'document_move_acl', 'document_delete_acl', 'dis', 'view']:
  44. if flask.request.form.get(i, '') == '':
  45. all_d += 'normal'
  46. if i != 'view':
  47. all_d += ' | '
  48. else:
  49. all_d += flask.request.form.get(i, '')
  50. if i != 'view':
  51. all_d += ' | '
  52. admin_check(5, check_data + ' (' + all_d + ')')
  53. conn.commit()
  54. return redirect('/acl/' + url_pas(name))
  55. else:
  56. data = ''
  57. acl_list = get_acl_list('user') if re.search(r'^user:', name) else get_acl_list()
  58. if not re.search(r'^user:', name):
  59. acl_get_list = [
  60. [load_lang('view_acl'), 'view', '2', '1.'],
  61. [load_lang('document_acl'), 'decu', '3', '1.1.'],
  62. [load_lang('document_edit_acl'), 'document_edit_acl', '4', '1.1.1.'],
  63. [load_lang('document_move_acl'), 'document_move_acl', '4', '1.1.2.'],
  64. [load_lang('document_delete_acl'), 'document_delete_acl', '4', '1.1.3.'],
  65. [load_lang('discussion_acl'), 'dis', '2', '2.'],
  66. ]
  67. else:
  68. acl_get_list = [
  69. [load_lang('document_acl'), 'decu', '2', '1.']
  70. ]
  71. for i in acl_get_list:
  72. data += '' + \
  73. '<h' + i[2] + '>' + i[0] + (' (' + load_lang('beta') + ')' if i[2] == '4' else '') + '</h' + i[2] + '>' + \
  74. '<hr class="main_hr">' + \
  75. '<select name="' + i[1] + '" ' + check_ok + '>' + \
  76. ''
  77. curs.execute(db_change("select data from acl where title = ? and type = ?"), [name, i[1]])
  78. acl_data = curs.fetchall()
  79. for data_list in acl_list:
  80. check = 'selected="selected"' if acl_data and acl_data[0][0] == data_list else ''
  81. data += '<option value="' + data_list + '" ' + check + '>' + (data_list if data_list != '' else 'normal') + '</option>'
  82. data += '</select>'
  83. data += '<hr class="main_hr">'
  84. curs.execute(db_change("select data from acl where title = ? and type = ?"), [name, 'why'])
  85. acl_data = curs.fetchall()
  86. acl_why = html.escape(acl_data[0][0]) if acl_data else ''
  87. data += '' + \
  88. '<h2>' + load_lang('why') + '</h2>' + \
  89. '<input value="' + acl_why + '" placeholder="' + load_lang('why') + '" name="why" ' + check_ok + '>' + \
  90. '<hr class="main_hr">' + \
  91. ''
  92. data += '''
  93. <h2>''' + load_lang('explanation') + '''</h2>
  94. <span id="exp"></span>
  95. <ul class="opennamu_ul">
  96. <li>normal : ''' + load_lang('unset') + '''</li>
  97. <li>admin : ''' + load_lang('admin_acl') + '''</li>
  98. <li>user : ''' + load_lang('member_acl') + '''</li>
  99. <li>50_edit : ''' + load_lang('50_edit_acl') + '''</li>
  100. <li>all : ''' + load_lang('all_acl') + '''</li>
  101. <li>email : ''' + load_lang('email_acl') + '''</li>
  102. <li>owner : ''' + load_lang('owner_acl') + '''</li>
  103. <li>ban : ''' + load_lang('ban_acl') + '''</li>
  104. <li>before : ''' + load_lang('before_acl') + '''</li>
  105. <li>30_day : ''' + load_lang('30_day_acl') + '''</li>
  106. <li>ban_admin : ''' + load_lang('ban_admin_acl') + '''</li>
  107. <li>not_all : ''' + load_lang('not_all_acl') + '''</li>
  108. </ul>
  109. '''
  110. return easy_minify(flask.render_template(skin_check(),
  111. imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('acl') + ')', 0])],
  112. data = '''
  113. <form method="post">
  114. <a href="/setting/acl">(''' + load_lang('main_acl_setting') + ''')</a>
  115. <hr class="main_hr">
  116. ''' + render_simple_set(data) + '''
  117. <button type="submit" ''' + check_ok + '''>''' + load_lang('save') + '''</button>
  118. </form>
  119. ''',
  120. menu = [
  121. ['w/' + url_pas(name), load_lang('document')],
  122. ['manager', load_lang('admin')],
  123. ['admin_log?search=' + url_pas('acl (' + name + ')'), load_lang('acl_record')]
  124. ]
  125. ))