2
0

view_acl.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. from .tool.func import *
  2. def view_acl(name):
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. check_ok = ''
  6. user_page = 0
  7. ip = ip_check()
  8. if flask.request.method == 'POST':
  9. check_data = 'document_set (' + name + ')'
  10. else:
  11. check_data = None
  12. user_data = re.search(r'^user:(.+)$', name)
  13. if user_data:
  14. if check_data and ip_or_user(ip) != 0:
  15. return redirect('/login')
  16. if user_data.group(1) != ip:
  17. if admin_check(5) != 1:
  18. if check_data:
  19. return re_error('/error/3')
  20. else:
  21. check_ok = 'disabled'
  22. else:
  23. user_page = 1
  24. else:
  25. if admin_check(5) != 1:
  26. if check_data:
  27. return re_error('/error/3')
  28. else:
  29. check_ok = 'disabled'
  30. if flask.request.method == 'POST':
  31. acl_data = [['decu', flask.request.form.get('decu', '')]]
  32. acl_data += [['document_edit_acl', flask.request.form.get('document_edit_acl', '')]]
  33. acl_data += [['document_move_acl', flask.request.form.get('document_move_acl', '')]]
  34. acl_data += [['document_delete_acl', flask.request.form.get('document_delete_acl', '')]]
  35. acl_data += [['dis', flask.request.form.get('dis', '')]]
  36. acl_data += [['view', flask.request.form.get('view', '')]]
  37. acl_data += [['why', flask.request.form.get('why', '')]]
  38. for i in acl_data:
  39. curs.execute(db_change("select title from acl where title = ? and type = ?"), [name, i[0]])
  40. if curs.fetchall():
  41. curs.execute(db_change("update acl set data = ? where title = ? and type = ?"), [i[1], name, i[0]])
  42. else:
  43. curs.execute(db_change("insert into acl (title, data, type) values (?, ?, ?)"), [name, i[1], i[0]])
  44. all_d = ''
  45. for i in ['decu', 'document_edit_acl', 'document_move_acl', 'document_delete_acl', 'dis', 'view']:
  46. if flask.request.form.get(i, '') == '':
  47. all_d += 'normal'
  48. if i != 'view':
  49. all_d += ' | '
  50. else:
  51. all_d += flask.request.form.get(i, '')
  52. if i != 'view':
  53. all_d += ' | '
  54. markup_data = flask.request.form.get('document_markup', '')
  55. curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_markup'"), [name])
  56. db_data = curs.fetchall()
  57. if db_data:
  58. curs.execute(db_change("update data_set set set_data = ? where doc_name = ? and set_name = 'document_markup'"), [
  59. markup_data, name
  60. ])
  61. else:
  62. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'document_markup', ?)"), [
  63. name, markup_data
  64. ])
  65. if not db_data or db_data[0][0] != markup_data:
  66. curs.execute(db_change("select data from data where title = ?"), [name])
  67. db_data_2 = curs.fetchall()
  68. if db_data_2:
  69. render_set(
  70. doc_name = name,
  71. doc_data = db_data_2[0][0],
  72. data_type = 'backlink'
  73. )
  74. markup_data = markup_data if markup_data != '' else 'normal'
  75. if user_page == 1:
  76. admin_check(5, check_data + ' (' + all_d + ')' + ' (' + markup_data + ')')
  77. conn.commit()
  78. return redirect('/acl/' + url_pas(name))
  79. else:
  80. data = '<h2>' + load_lang('acl') + '</h2>'
  81. acl_list = get_acl_list('user') if re.search(r'^user:', name) else get_acl_list()
  82. if not re.search(r'^user:', name):
  83. acl_get_list = [
  84. [load_lang('view_acl'), 'view', '3'],
  85. [load_lang('document_acl'), 'decu', '4'],
  86. [load_lang('document_edit_acl'), 'document_edit_acl', '5'],
  87. [load_lang('document_move_acl'), 'document_move_acl', '5'],
  88. [load_lang('document_delete_acl'), 'document_delete_acl', '5'],
  89. [load_lang('discussion_acl'), 'dis', '3'],
  90. ]
  91. else:
  92. acl_get_list = [
  93. [load_lang('document_acl'), 'decu', '2']
  94. ]
  95. for i in acl_get_list:
  96. data += '' + \
  97. '<h' + i[2] + '>' + i[0] + (' (' + load_lang('beta') + ')' if i[2] == '4' else '') + '</h' + i[2] + '>' + \
  98. '<hr class="main_hr">' + \
  99. '<select name="' + i[1] + '" ' + check_ok + '>' + \
  100. ''
  101. curs.execute(db_change("select data from acl where title = ? and type = ?"), [name, i[1]])
  102. acl_data = curs.fetchall()
  103. for data_list in acl_list:
  104. check = 'selected="selected"' if acl_data and acl_data[0][0] == data_list else ''
  105. data += '<option value="' + data_list + '" ' + check + '>' + (data_list if data_list != '' else 'normal') + '</option>'
  106. data += '</select>'
  107. data += '<hr class="main_hr">'
  108. curs.execute(db_change("select data from acl where title = ? and type = ?"), [name, 'why'])
  109. acl_data = curs.fetchall()
  110. acl_why = html.escape(acl_data[0][0]) if acl_data else ''
  111. data += '' + \
  112. '<h3>' + load_lang('why') + '</h3>' + \
  113. '<input value="' + acl_why + '" placeholder="' + load_lang('why') + '" name="why" ' + check_ok + '>' + \
  114. '<hr class="main_hr">' + \
  115. ''
  116. data += '''
  117. <h3>''' + load_lang('explanation') + '''</h3>
  118. <span id="exp"></span>
  119. <ul class="opennamu_ul">
  120. <li>normal : ''' + load_lang('unset') + '''</li>
  121. <li>admin : ''' + load_lang('admin_acl') + '''</li>
  122. <li>user : ''' + load_lang('member_acl') + '''</li>
  123. <li>50_edit : ''' + load_lang('50_edit_acl') + '''</li>
  124. <li>all : ''' + load_lang('all_acl') + '''</li>
  125. <li>email : ''' + load_lang('email_acl') + '''</li>
  126. <li>owner : ''' + load_lang('owner_acl') + '''</li>
  127. <li>ban : ''' + load_lang('ban_acl') + '''</li>
  128. <li>before : ''' + load_lang('before_acl') + '''</li>
  129. <li>30_day : ''' + load_lang('30_day_acl') + '''</li>
  130. <li>ban_admin : ''' + load_lang('ban_admin_acl') + '''</li>
  131. <li>not_all : ''' + load_lang('not_all_acl') + '''</li>
  132. <li>90_day : ''' + load_lang('90_day_acl') + '''</li>
  133. </ul>
  134. <hr class="main_hr">
  135. <h2>''' + load_lang('markup') + '''</h2>
  136. '''
  137. curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_markup'"), [name])
  138. db_data = curs.fetchall()
  139. markup_load = db_data[0][0] if db_data and db_data[0][0] != '' else ''
  140. markup_list = ['normal'] + get_init_set_list('markup')['list']
  141. markup_html = ''
  142. for for_a in markup_list:
  143. if markup_load == for_a:
  144. markup_html = '<option value="' + (for_a if for_a != 'normal' else '') + '">' + for_a + '</option>' + markup_html
  145. else:
  146. markup_html += '<option value="' + (for_a if for_a != 'normal' else '') + '">' + for_a + '</option>'
  147. markup_html = '<select name="document_markup" ' + check_ok + '>' + markup_html + '</select>'
  148. data += markup_html
  149. data += '<hr class="main_hr">'
  150. return easy_minify(flask.render_template(skin_check(),
  151. imp = [name, wiki_set(), wiki_custom(), wiki_css(['(' + load_lang('acl') + ')', 0])],
  152. data = '''
  153. <form method="post">
  154. <a href="/setting/acl">(''' + load_lang('main_acl_setting') + ''')</a>
  155. <hr class="main_hr">
  156. ''' + render_simple_set(data) + '''
  157. <button type="submit" ''' + check_ok + '''>''' + load_lang('save') + '''</button>
  158. </form>
  159. ''',
  160. menu = [
  161. ['w/' + url_pas(name), load_lang('document')],
  162. ['manager', load_lang('admin')],
  163. ['list/admin/auth_use/' + url_pas('acl (' + name + ')') + '/1', load_lang('acl_record')]
  164. ]
  165. ))