Changeset 1108 in main for branches


Ignore:
Timestamp:
05/21/12 15:54:57 (8 years ago)
Author:
pcosquer
Message:

do not allow to delegate someone who is not in the same group of an object. fixes #119

Location:
branches/1.0/openPLM
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/1.0/openPLM/plmapp/controllers/plmobject.py

    r977 r1108  
    117117            if sponsor.username == settings.COMPANY: 
    118118                sponsor = user 
     119            if not obj.check_in_group(sponsor, False): 
     120                sponsor = user 
    119121        except models.DelegationLink.DoesNotExist: 
    120122            sponsor = user 
     
    281283        if not self.object.is_editable: 
    282284            raise PermissionError("The object is not editable") 
     285 
     286    def check_in_group(self, user, raise_=True): 
     287        if user.username == settings.COMPANY: 
     288            return True 
     289        if not self.group.user_set.filter(id=user.id).exists(): 
     290            if raise_: 
     291                raise PermissionError("The user %s does not belong to the group." % user.username) 
     292            else: 
     293                return False 
     294        return True 
    283295 
    284296    def revise(self, new_revision): 
     
    379391        if not dirty: 
    380392            self.check_contributor(new_owner) 
     393            self.check_in_group(new_owner) 
    381394            if new_owner.username == settings.COMPANY: 
    382395                if self.is_editable: 
     
    409422        if new_notified != self._user: 
    410423            self.check_permission("owner") 
     424        self.check_in_group(new_notified) 
    411425        models.PLMObjectUserLink.objects.create(plmobject=self.object, 
    412426            user=new_notified, role="notified") 
     
    430444                user=notified, role="notified") 
    431445        link.delete() 
    432         details = "user: %s" % notified 
     446        details = u"user: %s" % notified 
    433447        self._save_histo("Notified removed", details)  
    434448 
     
    447461 
    448462        self.check_contributor(signer) 
     463        self.check_in_group(signer) 
     464         
    449465        # remove old signer 
    450466        old_signer = None 
     
    465481        models.PLMObjectUserLink.objects.create(plmobject=self.object, 
    466482                                                user=signer, role=role) 
    467         details = "signer: %s, level : %d" % (signer, level) 
     483        details = u"signer: %s, level : %d" % (signer, level) 
    468484        if old_signer: 
    469             details += ", old signer: %s" % old_signer 
     485            details += u", old signer: %s" % old_signer 
    470486        self._save_histo("New signer", details)  
    471487 
  • branches/1.0/openPLM/plmapp/templatetags/plmapp_tags.py

    r1068 r1108  
    3737        return parent.can_add_child(child) 
    3838    elif action == "delegate": 
    39         return isinstance(child, (User, UserController)) 
    40   
     39        if isinstance(child, (User, UserController)): 
     40            if hasattr(parent, "check_in_group"): 
     41                from django.conf import settings 
     42                if child.username == settings.COMPANY: 
     43                    return False 
     44                return parent.check_in_group(child) 
     45        return True 
    4146    return False 
    4247 
  • branches/1.0/openPLM/plmapp/tests/base.py

    r876 r1108  
    3939        user.get_profile().is_contributor = True 
    4040        user.get_profile().save() 
     41        user.groups.add(self.group) 
    4142        return user 
    4243 
  • branches/1.0/openPLM/plmapp/tests/controllers/plmobject.py

    r864 r1108  
    177177        controller = self.create("Part1") 
    178178        user = self.get_contributor() 
     179        user.groups.remove(self.group) 
    179180        ctrl = self.CONTROLLER(controller.object, user) 
    180181        self.failIf(ctrl.is_revisable()) 
     
    280281        self.assertRaises(ValueError, controller.set_owner, self.cie) 
    281282 
     283    def test_set_owner_error_not_in_group(self): 
     284        controller = self.create("Part1") 
     285        user = self.get_contributor() 
     286        user.groups.remove(self.group) 
     287        self.assertRaises(exc.PermissionError, controller.set_owner, user) 
     288 
    282289    def test_set_sign1(self): 
    283290        controller = self.create("Part1") 
     
    300307        user = User(username="user2") 
    301308        user.save() 
     309        user.groups.add(controller.group) 
    302310        self.assertRaises(exc.PermissionError, controller.set_role, user, 
    303311                          level_to_sign_str(0)) 
    304312 
     313    def test_set_signerr_error_not_in_group(self): 
     314        controller = self.create("Part1") 
     315        user = self.get_contributor() 
     316        user.groups.remove(self.group) 
     317        self.assertRaises(exc.PermissionError, controller.set_role, user, 
     318                          level_to_sign_str(0)) 
     319 
    305320    def test_add_notified(self): 
    306321        controller = self.create("Part1") 
    307322        user = User(username="user2") 
    308323        user.save() 
     324        user.groups.add(controller.group) 
    309325        controller.add_notified(user) 
    310326        models.PLMObjectUserLink.objects.get(user=user, plmobject=controller.object, 
    311327                                      role="notified") 
     328 
     329    def test_add_notified_error_not_in_group(self): 
     330        controller = self.create("Part1") 
     331        user = self.get_contributor() 
     332        user.groups.remove(self.group) 
     333        self.assertRaises(exc.PermissionError, controller.add_notified, user) 
    312334 
    313335    def test_remove_notified(self): 
  • branches/1.0/openPLM/plmapp/tests/views.py

    r1104 r1108  
    362362    def test_management(self): 
    363363        response = self.get(self.base_url + "management/", page="management") 
     364        self.brian.groups.add(self.group) 
    364365        self.controller.set_owner(self.brian) 
    365366        response = self.get(self.base_url + "management/") 
     
    378379    def test_management_add_post(self): 
    379380        data = dict(type="User", username=self.brian.username) 
     381        self.brian.groups.add(self.group) 
    380382        response = self.post(self.base_url + "management/add/", data) 
    381383        self.assertTrue(m.PLMObjectUserLink.objects.filter(plmobject=self.controller.object, 
     
    384386    def test_management_replace_get(self): 
    385387        role = level_to_sign_str(0) 
     388        self.brian.groups.add(self.group) 
    386389        self.controller.set_signer(self.brian, role) 
    387390        link = m.PLMObjectUserLink.objects.get(plmobject=self.controller.object, 
     
    395398    def test_management_replace_post(self): 
    396399        role = level_to_sign_str(0) 
     400        self.brian.groups.add(self.group) 
    397401        self.controller.set_signer(self.brian, role) 
    398402        link = m.PLMObjectUserLink.objects.get(plmobject=self.controller.object, 
     
    407411 
    408412    def test_management_delete(self): 
     413        self.brian.groups.add(self.group) 
    409414        self.controller.add_notified(self.brian) 
    410415        link = m.PLMObjectUserLink.objects.get(plmobject=self.controller.object, 
  • branches/1.0/openPLM/plmapp/views/main.py

    r1104 r1108  
    10161016            ctx["remove_notify_link"] = link[0] 
    10171017        else: 
    1018             initial = { "type" : "User", 
    1019                         "username" : request.user.username 
    1020                       } 
    1021             form = forms.SelectUserForm(initial=initial) 
    1022             for field in ("type", "username"): 
    1023                 form.fields[field].widget = HiddenInput()  
    1024             ctx["notify_self_form"] = form 
     1018            if obj.check_in_group(request.user, False): 
     1019                initial = { "type" : "User", 
     1020                            "username" : request.user.username 
     1021                          } 
     1022                form = forms.SelectUserForm(initial=initial) 
     1023                for field in ("type", "username"): 
     1024                    form.fields[field].widget = HiddenInput()  
     1025                ctx["notify_self_form"] = form 
     1026                ctx["can_notify"] = True 
     1027            else: 
     1028                ctx["can_notify"] = False 
    10251029    ctx.update({'current_page':'management', 
    1026                 'object_management': object_management_list}) 
     1030            'object_management': object_management_list}) 
    10271031     
    10281032    return r2r('management.html', ctx, request) 
  • branches/1.0/openPLM/templates/management.html

    r1093 r1108  
    2020            </form> 
    2121        {% else %} 
    22             <form  method="POST" action="./add/"> 
    23                 {{ notify_self_form.as_p }} 
    24                 <input name="action" type="submit" class="{{"Button"|button}}" value="{% trans "Notify me" %}" /> 
    25             </form> 
     22            {% if can_notify %} 
     23                <form  method="POST" action="./add/"> 
     24                    {{ notify_self_form.as_p }} 
     25                    <input name="action" type="submit" class="{{"Button"|button}}" value="{% trans "Notify me" %}" /> 
     26                </form> 
     27            {% endif %} 
    2628        {% endif %} 
    2729    {% endif %} 
Note: See TracChangeset for help on using the changeset viewer.