taiga-back icon indicating copy to clipboard operation
taiga-back copied to clipboard

"Only my tasks" Feature request

Open jadelaop opened this issue 8 years ago • 3 comments

Hi taiga team,

I think that a great feature for next taiga version is that a user can see only their issues and their user histories.

I've implemented this feature for me (beta):

  • In users/models.py added field only_my_tasks to Role class: only_my_tasks = models.BooleanField(default=False)

  • In users/models.py added field can_view_profiles to User Class can_view_profiles = models.BooleanField(default=True)

  • In projects/userstories/api.py

def get_queryset(self):
        user = self.request.user
        project_id = self.request.QUERY_PARAMS.get("project", None)
        if project_id:
            project = Project.objects.get(id=project_id)
            membership = Membership.objects.get(user=user, project=project)
            role = membership.role
            if role.only_my_tasks:
                qs = models.UserStory.objects.filter(Q(owner=user) | Q(assigned_to=user))
            else:
                qs = models.UserStory.objects.all()

...

  • In timeline/service.py
def get_project_timeline(project, accessing_user=None):
    from taiga.projects.models import Membership
    from taiga.projects.userstories.models import UserStory
    namespace = build_project_namespace(project)
    timeline = get_timeline(project, namespace)
    if accessing_user is not None:
        timeline = filter_timeline_for_user(timeline, accessing_user)
    membership = Membership.objects.get(user=accessing_user, project=project)
    role = membership.role
    if role.only_my_tasks:
        us = UserStory.objects.filter(Q(owner=accessing_user) | Q(assigned_to=accessing_user))                
        us_ids = []
        for row in us:    
            us_ids.append(row.id)
        timeline = timeline.filter(event_type__contains='userstory', data__userstory__id__in=us_ids)
    return timeline
  • In users/api.py
def get_queryset(self):
        if not self.request.user.is_superuser and not self.request.user.can_view_profiles:
            raise exc.PermissionDenied("Unauthorized")
        qs = super().get_queryset()
        qs = qs.prefetch_related("memberships")
        qs = user_utils.attach_extra_info(qs, user=self.request.user)
        return qs

Thank you very much.

jadelaop avatar Feb 12 '18 14:02 jadelaop

Thank you for your interest @jadelaop .

I really would like to understand which is your use case, what do you use this feature for.

If I understood right, you implemented a new property to a role. I am curious about how do you apply this restricted role to an user. Did you implement something on taiga-front too?

migonzalvar avatar Feb 13 '18 18:02 migonzalvar

Hi @migonzalvar

My use case is for manage the editorial team of my blog. I'm the manager, and i don't want that users with "only my tasks" can view "posts" assigned to other users (or not assigned yet).

Nothing implemented on taiga-front for the moment.

Sorry, I edited my first message, "only my tasks" field is in role class.

jadelaop avatar Feb 13 '18 18:02 jadelaop

This feature is in taiga 4.0?

jadelaop avatar Nov 30 '18 19:11 jadelaop