예제 #1
0
def add_role():
    """
    Add a role to the database
    """
    check_admin()

    add_role = True

    form = RoleForm()
    if form.validate_on_submit():
        role = Role(name=form.name.data, description=form.description.data)

        try:
            # add role to the database
            db.session.add(role)
            db.session.commit()
            flash('You have successfully added a new role.')
        except:
            # in case role name already exists
            flash('Error: role name already exists.')

        # redirect to the roles page
        return redirect(url_for('admin.list_roles'))

    # load role template
    return render_template('admin/roles/addeditrole.html',
                           add_role=add_role,
                           form=form,
                           title='Add Role')
예제 #2
0
def edit_role(id):
    """
    Edit a role
    """
    check_admin()

    add_role = False

    role = Role.query.get_or_404(id)
    form = RoleForm(obj=role)
    if form.validate_on_submit():
        role.name = form.name.data
        role.description = form.description.data
        db.session.add(role)
        db.session.commit()
        flash('You have successfully edited the role.')

        # redirect to the roles page
        return redirect(url_for('admin.list_roles'))

    form.description.data = role.description
    form.name.data = role.name
    return render_template('admin/roles/addeditrole.html',
                           add_role=add_role,
                           form=form,
                           title="Edit Role")
예제 #3
0
def role_edit(id=None):
    # 角色修改
    form = RoleForm()
    form.submit.label.text = u'修改'
    role = Role.query.get_or_404(id)
    is_flag = True
    if request.method == 'GET':
        auths = role.auths
        # get时进行赋值。应对无法模板中赋初值
        form.name.data = role.name
        form.auths.data = list(map(lambda v: int(v), auths.split(",")))
    if form.validate_on_submit():
        if role.name != form.name.data and Role.query.filter_by(
                name=form.name.data).first():
            is_flag = False
            flash(u'您输入的角色已存在', 'err')
        if is_flag == False:
            return render_template('admin/role_edit.html', form=form)
        role.name = form.name.data
        role.auths = ','.join(map(lambda v: str(v), form.auths.data))
        db.session.add(role)
        oplog = Oplog(user_id=session['user_id'],
                      ip=request.remote_addr,
                      reason=u'修改角色:%s' % role.name)
        db.session.add(oplog)
        db.session.commit()
        flash(u'角色修改成功', 'ok')
        return redirect(url_for('admin.role_list'))
    return render_template('admin/role_edit.html', form=form)
예제 #4
0
파일: views.py 프로젝트: dmaish/dream-team
def edit_role(id):
    """ edit a role """

    check_admin()
    add_role = False

    role = Role.query.get_or_404(id)
    # prepopulating the form using the above role query
    form = RoleForm(obj=role)

    # populating the database with info from the submitted form
    if form.validate_on_submit():
        role.name = form.name.data
        role.description = form.description.data
        db.session.add(role)
        db.session.commit()
        flash(' you have successfully edited the role ')

        # redirect to the roles page to view the changes
        return redirect(url_for('admin.list_roles'))
    form.description.data = role.description
    form.name.data = role.name
    return render_template('admin/roles/role.html',
                           add_role=add_role,
                           form=form,
                           title="Edit Role")
def add_role():
    """
    Add a role to the database
    """
    check_admin()

    add_role = True

    form = RoleForm()
    if form.validate_on_submit():
        role = Role(name=form.name.data, description=form.description.data)

        try:
            # add role to the database
            db.session.add(role)
            db.session.commit()
            flash('Cargo editado com sucesso.')
        except:
            # in case role name already exists
            flash('Erro: nome do cargo ja existe.')

        # redirect to the roles page
        return redirect(url_for('admin.list_roles'))

    # load role template
    return render_template('admin/roles/role.html',
                           add_role=add_role,
                           form=form,
                           title='Adicionar Cargo')
예제 #6
0
파일: views.py 프로젝트: nikhila05/pietrack
def member_role_create(request, slug):
    project = Project.objects.get(slug=slug)
    form = RoleForm(request.POST, project=project)
    if(form.is_valid()):
        role = form.save()
        return HttpResponse(json.dumps({'error': False, 'role_id': role.id, 'role_name': role.name, 'slug': role.slug}), content_type="application/json")
    else:
        return HttpResponse(json.dumps({'error': True, 'errors': form.errors}), content_type="application/json")
예제 #7
0
def edit_role(request, id=None):
    context = {
        'page_title': u'Papéis',
        'edit_name': 'role',
        'has_back': False,
        'features': get_user_features(request)
    }
    t = get_template('edit.html')
    role = None
    form = RoleForm()
    try:
        if request.method == 'POST':
            form = RoleForm(request.POST)
            if form.is_valid():
                cd = form.cleaned_data
                role = _save_role(cd)
                initial = role.__dict__
                messages.success(request, 'Papel salvo com sucesso.')
                form = RoleForm(initial={})

        elif id:
            role = Role.objects.get(id=id)
            initial = role.__dict__
            form = RoleForm(initial=initial)
    except Exception as e:
        log.error(e)
        messages.error(
            request,
            u'Ocorreu um erro ao processar a requisição, por favor tente novamente.'
        )
    context = _set_role_form_context(role, form, context)
    return render_to_response('edit.html',
                              context,
                              context_instance=RequestContext(request))
예제 #8
0
 def post(self):
     form = RoleForm(data=request.get_json())
     if not form.validate():
         abort(400)
     role = Role(**form.data)
     db.session.add(role)
     db.session.commit()
     response = jsonify(**role.to_dict())
     response.status_code = 201
     response.headers.add("Location", f"roles/{role.id}")
     return response
예제 #9
0
def select_role():
    form = RoleForm()
    errors = list()
    form.roles.choices = current_user.roles

    if form.is_submitted():
        current_user.current_role = form.roles.data
        identity_changed.send(current_app._get_current_object(), identity=Identity(current_user.id))
        if not UserProfileManager.has_ui_assistant() and current_user.master:
            current_user.set_master(None)
            identity_changed.send(current_app._get_current_object(), identity=Identity(current_user.id))
        return redirect_after_user_change()
    return render_template('user/select_role.html', form=form, errors=errors)
예제 #10
0
def select_role():
    form = RoleForm()

    errors = list()

    form.roles.choices = current_user.roles

    # Validate form input
    if form.is_submitted():
        current_user.current_role = form.roles.data
        identity_changed.send(current_app._get_current_object(),
                              identity=Identity(current_user.id))
        return redirect(
            request.args.get('next') or request.referrer or url_for('index'))
    return render_template('user/select_role.html', form=form, errors=errors)
예제 #11
0
 def put(self, role_id):
     role = Role.query.filter_by(id=int(role_id)).first()
     if not role:
         abort(404)
     form = RoleForm(data=request.get_json())
     if not form.validate():
         abort(400)
     columns_keys = Role.__table__.columns.keys()
     for field in columns_keys:
         if field in form.data:
             setattr(role, field, form.data[field])
     db.session.commit()
     response = jsonify(role.to_dict())
     response.status_code = 200
     return response
예제 #12
0
def role_create():
    form = RoleForm(request.form)
    if request.method == 'POST' and form.validate():
        try:
            role = Role()
            form.populate_obj(role)
            db.session.add(role)
            db.session.commit()
        except Exception as error:
            app.logger.error('Error creating a role : {}\n{}'.format(
                error, traceback.format_exc()))
    return render_template('forms/model.jinja',
                           form=form,
                           type='create',
                           action=url_for('role_create'),
                           section='role')
예제 #13
0
def add_role():

    check_admin()
    add_role = True
    form = RoleForm()
    if form.validate_on_submit():
        role = Role(name=form.name.data, description=form.description.data)

        try:
            db.session.add(role)
            db.session.commit()
            flash('You have successfully added a new role.')
        except:
            flash('Role already exists.')
        return redirect(url_for('admin.list_roles'))
    return render_template('admin/roles/role.html', add_role=add_role, form=form, title='Add Role')
예제 #14
0
def role_edit(id):
    role = Role.query.get(id)
    form = RoleForm(request.form, obj=role)

    if request.method == 'POST' and form.validate():
        try:
            form.populate_obj(role)
            db.session.commit()
            flash("Hlutverki var breytt", category='success')
        except Exception as error:
            app.logger.error('Error updating a role : {}\n{}'.format(
                error, traceback.format_exc()))
    return render_template('forms/model.jinja',
                           role=role,
                           form=form,
                           type='edit',
                           action=url_for('role_edit', id=id),
                           section='role')
예제 #15
0
def role_add():
    form = RoleForm()
    if form.validate_on_submit():
        data = form.data
        role_num = Role.query.filter_by(name=data["role_name"]).count()
        if role_num == 1:
            flash("角色名称已经存在!", "err")
            return redirect(url_for("admin.role_add"))
        role = Role(
            name=data["role_name"],
            auths=','.join(map(lambda v: str(v), data["auths"])),
        )
        db.session.add(role)
        db.session.commit()
        flash("添加角色成功!", "ok")
        # return redirect(url_for("admin.role_add",id=id))
        return redirect(url_for("admin.role_list", page=1))
    return render_template("admin/role_add.html", form=form)
예제 #16
0
파일: views.py 프로젝트: gitaux/vial-mvc
def add_role():
    """
    Add a role to the database.
    :return:
    """
    check_admin()
    form = RoleForm()
    if form.validate_on_submit():
        role = Role(name=form.name.data, description=form.description.data)
        try:
            db.session.add(role)
            db.session.commit()
            flash('Successfully added a new role: "%s".' % str(role.name))
        except:
            db.session.rollback()
            flash('Failed to add a new role: "%s".' % str(role.name))
        return redirect(url_for('admin.roles'))
    return render_template('admin/roles/add_role.html',
                           title='Add Role',
                           form=form)
예제 #17
0
def role_edit(id=None):
    form = RoleForm()
    role = Role.query.get_or_404(id)
    if request.method == "GET":
        auths = role.auths
        form.auths.data = list(map(lambda v: int(v), auths.split(",")))
    if form.validate_on_submit():
        data = form.data
        role_num = Role.query.filter_by(name=data["role_name"]).count()
        if role.name != data["role_name"] and role_num == 1:
            flash("角色名称已经存在!", "err")
            return redirect(url_for("admin.role_edit", id=id))
        role.name = data["role_name"]
        role.auths = ','.join(map(lambda v: str(v), data["auths"])),
        db.session.add(role)
        db.session.commit()
        flash("修改角色成功!", "ok")
        #return redirect(url_for("admin.role_edit",id=id))
        return redirect(url_for("admin.role_list", page=1))
    return render_template("admin/role_edit.html", form=form, role=role)
예제 #18
0
def addRole(request):
    form = RoleForm()
    if request.method == 'POST':
        form = RoleForm(request.POST)
        form.save()
        return redirect('/role/')
    return render(request, 'rbac/add.html', locals())
예제 #19
0
def editRole(request, id):
    role_obj = models.Role.objects.filter(id=id).first()
    form = RoleForm(instance=role_obj)
    if request.method == 'POST':
        form = RoleForm(request.POST, instance=role_obj)
        form.save()
        return redirect('/role/')
    return render(request, 'rbac/edit.html', locals())
예제 #20
0
def edit_role(id):
    check_admin()
    add_role = False
    role = Role.query.get_or_404(id)
    form = RoleForm(obj=role)
    if form.validate_on_submit():
        role.name = form.name.data
        role.description = form.description.data
        try:
            db.session.add(role)
            db.session.commit()
            logger.info('role edited ')
            flash('You have successfully edited the role.')
            return redirect(url_for('admin.list_roles'))
        except Exception as e:
            logger.error('role cannot be edited')
            flash("cannot edit")
    form.description.data = role.description
    form.name.data = role.name
    return render_template('admin/roles/role.html',
                           add_role=add_role,
                           form=form,
                           title="Edit Role")
예제 #21
0
    def create_form(self, resource=None, edit_form=False):
        """Return form with fields loaded from DB.

        :param object resource: Optional role object
        :param bool edit_form: Set if edit form
        """
        form = RoleForm(self.config_models, obj=resource)

        session = self.session()
        self.update_form_groups(resource, edit_form, form, session)
        self.update_form_users(resource, edit_form, form, session)
        session.close()

        return form
예제 #22
0
def role_add():
    # 角色添加
    form = RoleForm()
    is_flag = True
    if form.validate_on_submit():
        if Role.query.filter_by(name=form.name.data).first():
            is_flag = False
            flash(u'您输入的角色已存在', 'err')
        if is_flag == False:
            return render_template('admin/role_add.html', form=form)
        role = Role(
            name=form.name.data,
            # lambda v: str(v) 匿名函数,将v转换为字符串
            # map(f, [list])内置函数,接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回
            auths=','.join(map(lambda v: str(v), form.auths.data)))
        db.session.add(role)
        oplog = Oplog(user_id=session['user_id'],
                      ip=request.remote_addr,
                      reason=u'添加角色:%s' % form.name.data)
        db.session.add(oplog)
        db.session.commit()
        flash(u'角色添加成功', 'ok')
        return redirect(url_for('admin.role_add'))
    return render_template('admin/role_add.html', form=form)
예제 #23
0
    def create_form(self, resource=None, edit_form=False):
        """Return form with fields loaded from DB.

        :param object resource: Optional role object
        :param bool edit_form: Set if edit form
        """
        form = RoleForm(self.config_models, obj=resource)

        session = self.session()
        self.update_form_collection(resource, edit_form, form.groups,
                                    self.Group, 'sorted_groups', 'id', 'name',
                                    session)
        self.update_form_collection(resource, edit_form, form.users, self.User,
                                    'sorted_users', 'id', 'name', session)
        session.close()

        return form
예제 #24
0
파일: views.py 프로젝트: lixianwen/cmdbdemo
 def get_context_data(self, **kwargs):
     context = super(RoleList, self).get_context_data(**kwargs)
     context['form'] = RoleForm()
     return context
예제 #25
0
def admin():
    role_form = RoleForm()
    users = User.query.all()
    usernames = [u.username for u in users]
    role_form.username.validators.append(
        AnyOf(usernames, message="Username not found."))
    if role_form.validate_on_submit():
        form = role_form
        user = User.query.filter(User.username == form.username.data).one()

        try:
            role = Role.query.filter(Role.name == form.role.data).one()
        except NoResultFound:
            role = Role(name=form.role.data)
            db.session.add(role)

        if form.action.data == "add":
            if role not in user.roles:
                user.roles.append(role)
                db.session.add(user)
        elif form.action.data == "remove":
            if role in user.roles:
                user.roles.remove(role)
                db.session.add(user)

        db.session.commit()
        return redirect(url_for("horti.admin"))

    group_form = GroupForm()
    if group_form.validate_on_submit():
        form = group_form
        name = form.name.data
        if form.action.data == "add":
            tweety.post_groups(name=name)
        elif form.action.data == "remove":
            tweety.delete_group(name)
        groups = cache(tweety.get_groups, force_refresh=True)
        return redirect(url_for("horti.admin"))

    # display groups
    have_groups = False
    while not have_groups:
        groups = cache(tweety.get_groups)
        if not isinstance(groups, Response):
            have_groups = True
            groups.sort()
        sleep(0.2)

    # display roles
    roles = {}
    for user in users:
        roles[user.username] = ", ".join(sorted([r.name for r in user.roles]))

    template_data = {
        "role_form": role_form,
        "users": users,
        "roles": roles,
        "groups": groups,
        "group_form": group_form
    }
    return render_template("admin.html",
                           title=make_title("Admin"),
                           **template_data)
예제 #26
0
def add_edit_role(request, *args, **kwargs):
    """Takes in the project id and allows you to add a new role."""

    project_name = kwargs['project_name']
    project = get_object_or_404(CollabProject, slug=project_name)
    id = project.id

    # If the user is not the project admin, just return him to the project page.
    if not project.admin.filter(
            id=request.user.id) and not request.user.is_superuser:
        request.user.message_set.create(
            message="You do not have privileges to edit roles!")
        return HttpResponseRedirect(project.get_absolute_url())

    if 'role_id' in kwargs:
        role_id = kwargs['role_id']
        role = get_object_or_404(Role, id=role_id)
        # Check if the role exists in that project!
        if role.project.id != project.id:
            request.user.message_set.create(
                message="The role does not exist in that project!")
            return HttpResponseRedirect(project.get_absolute_url())
        edit, instance, initial = True, role, None
    else:
        edit, instance, initial = False, None, {}

    if request.method == 'POST':
        form = RoleForm(project.id,
                        request.POST,
                        instance=instance,
                        clean=(not edit),
                        initial=initial)
        if form.is_valid():
            if not edit:
                new_role = Role()
                message = "The role was added."
            else:
                message = "The role was modified."
            new_role = form.save(commit=False)
            new_role.project = project
            new_role.save()
            # Need this as I have a many to many field and did commit=False.
            form.save_m2m()

            # It's possible that a user gave some Editable privileges without the corresponding Viewable. The
            # following code automatically adds those Viewable privileges.
            for privilege in form.cleaned_data["privileges"]:
                if privilege.permission_type == 'Editable':
                    new_privilege = get_object_or_404(
                        Privilege,
                        project=project,
                        related_model=privilege.related_model,
                        permission_type='Viewable')
                    new_role.privileges.add(new_privilege)
            new_role.save()

            if form.cleaned_data["make_default"] == True:
                if project.default_role != new_role:
                    project.default_role = new_role
                    project.save()

            request.user.message_set.create(message=message)
            return HttpResponseRedirect(
                reverse('roles_overview',
                        kwargs={'project_name': project.slug}))
    else:
        form = RoleForm(project.id, instance=instance, initial=initial)
    return render_to_response('project/addrole.html', {
        'form': form,
        'project': project,
        'edit': edit,
        'role': instance
    },
                              context_instance=RequestContext(request))