svnhooks--单次提交的实现,提交后取消用户提交权限
在上一篇文章说到了,通过给用户提交权限,那么这个改变权限我们想做成单次的,授予了一次权限以后,如果用户提交了一个svn,那么就需要把权限给重新设置不可提交,那么我们可以通过svn的post-commit来完成。
关于svn的hook,可以在之前的文章查看,这里就不累赘了
下面是post-commit的核心代码,post-commit就是在用户提交完文件后执行的,代码主要就是获取了本次提交的作者,然后发送给服务器做一次权限变更操作
#!/bin/sh REPOS="$1" REV="$2" SVNLOOK=/usr/bin/svnlook # 获取提交者 AUTHOR=$($SVNLOOK author -r $REV $REPOS) # 发送提交者信息到程序接口 AUTHOR_API_URL="http://xxxx:5000/set_false" # 替换为你的程序接口 URL AUTHOR_JSON_PAYLOAD=$(cat <<EOF { "author": "$AUTHOR" } EOF ) # 发送提交者信息 curl -X POST "$AUTHOR_API_URL" -H 'Content-Type: application/json' -d "$AUTHOR_JSON_PAYLOAD" exit 0
下面就是服务器set_false方法,主要就是把收到的参数和本身的用户做一个对比,有数据的话就把value设成False,然后刷新页面
#提交完成后,把用户的权限设置成不可提交,实现单次提交权限 @app.route('/set_false', methods=['POST']) def set_false(): author = request.json.get('author') if author in users2: users2[author] = False socketio.emit('refresh_page') return jsonify({author: users2[author], 'message': '提交完成,提交权限取消'}), 200 else: return jsonify({'error': 'Key not found'}), 404
这样就可以实现了用户提交了一次代码后,就取消掉权限