This bugtracker is archived (announcement). New tickets are created on github.com. See all framework issues, cms issues, and search the module listings for more specific bugtrackers.

Ticket #2198: SiteTree.php.2.diff

File SiteTree.php.2.diff, 5.2 KB (added by simon_w, 7 years ago)

Updated diff. Modify methods as wanted

  • sapphire/core/model/SiteTree.php

     
    514514                if($member && $member->isAdmin()) { 
    515515                        return true; 
    516516                } 
    517  
    518           switch(strtolower($perm)) { 
    519             case 'edit': 
    520               if((Permission::check('CMS_ACCESS_CMSMain') && 
    521                                                 (($this->Editors == 'LoggedInUsers' && $member) || 
    522                                           ($this->Editors == 'OnlyTheseUsers' && $member && 
    523                                                 $member->isInGroup($this->EditorsGroup)))) == false) 
    524                                         return false; 
    525                                 break; 
    526  
    527             case 'view': 
    528                         case 'view_page': 
    529                                 if(((!$this->Viewers) || ($this->Viewers == 'Anyone') || 
    530                                                 ($this->Viewers == 'LoggedInUsers' && $member) || 
    531                                                 ($this->Viewers == 'OnlyTheseUsers' && $member && 
    532                                                  $member->isInGroup($this->ViewersGroup))) == false) 
    533                                         return false; 
    534                                 break; 
     517                 
     518                if(method_exists($this, 'can' . ucfirst($perm))) { 
     519                        $method = 'can' . ucfirst($perm); 
     520                        return $this->$method($member); 
    535521                } 
     522                 
     523                $args = array($perm, $member, true); 
     524                $this->extend('alternateCan', $args); 
     525                if($args[2] == false) return false; 
    536526 
    537527                return true; 
    538528 
     
    549539         * 
    550540         * @return boolean True if the current user can add children. 
    551541         */ 
    552         public function canAddChildren() { 
     542        public function canAddChildren($member = null) { 
     543                if(!isset($member)) { 
     544                        $member = Member::currentUser(); 
     545                } 
     546                if($member && $member->isAdmin()) { 
     547                        return true; 
     548                } 
     549                 
     550                $args = array($member, true); 
     551                $this->extend('alternateCanAddChildren', $args); 
     552                if($args[1] == false) return false; 
     553                 
    553554                return $this->canEdit() && $this->stat('allowed_children') != 'none'; 
    554555        } 
    555556 
     
    563564         * 
    564565         * @return boolean True if the current user can view this page. 
    565566         */ 
    566         public function canView() { 
    567                 return $this->can('view'); 
     567        public function canView($member = null) { 
     568                if(!isset($member)) { 
     569                        $member = Member::currentUser(); 
     570                } 
     571                if($member && $member->isAdmin()) { 
     572                        return true; 
     573                } 
     574                 
     575                $args = array($member, true); 
     576                $this->extend('alternateCanView', $args); 
     577                if($args[1] == false) return false; 
     578                 
     579                if(((!$this->Viewers) || ($this->Viewers == 'Anyone') || 
     580                                                ($this->Viewers == 'LoggedInUsers' && $member) || 
     581                                                ($this->Viewers == 'OnlyTheseUsers' && $member && 
     582                                                 $member->isInGroup($this->ViewersGroup))) == false) 
     583                                        return false; 
     584                return true; 
    568585        } 
     586         
     587        /** 
     588         * This function should return true if the current user can view this 
     589         * page. 
     590         * 
     591         * It can be overloaded to customise the security model for an 
     592         * application. 
     593         * 
     594         * @return boolean True if the current user can view this page. 
     595         */ 
     596        public function canView_page($member = null) { 
     597                if(!isset($member)) { 
     598                        $member = Member::currentUser(); 
     599                } 
     600                if($member && $member->isAdmin()) { 
     601                        return true; 
     602                } 
     603                 
     604                $args = array($member, true); 
     605                $this->extend('alternateCanView_page', $args); 
     606                if($args[1] == false) return false; 
     607                 
     608                return $this->canView($member); 
     609        } 
    569610 
    570611 
    571612        /** 
     
    577618         * 
    578619         * @return boolean True if the current user can delete this page. 
    579620         */ 
    580         public function canDelete() { 
     621        public function canDelete($member = null) { 
     622                if(!isset($member)) { 
     623                        $member = Member::currentUser(); 
     624                } 
     625                if($member && $member->isAdmin()) { 
     626                        return true; 
     627                } 
     628                 
     629                $args = array($member, true); 
     630                $this->extend('alternateCanDelete', $args); 
     631                if($args[1] == false) return false; 
     632                 
    581633                return $this->stat('can_create') != false; 
    582634        } 
    583635 
     
    592644         * @return boolean True if the current user can create pages on this 
    593645         *                 class. 
    594646         */ 
    595         public function canCreate() { 
     647        public function canCreate($member = null) { 
     648                if(!isset($member)) { 
     649                        $member = Member::currentUser(); 
     650                } 
     651                if($member && $member->isAdmin()) { 
     652                        return true; 
     653                } 
     654                 
     655                $args = array($member, true); 
     656                $this->extend('alternateCanCreate', $args); 
     657                if($args[1] == false) return false; 
     658                 
    596659                return $this->stat('can_create') != false || Director::isDev(); 
    597660        } 
    598661 
     
    606669         * 
    607670         * @return boolean True if the current user can edit this page. 
    608671         */ 
    609         public function canEdit() { 
    610                 return $this->can('Edit'); 
     672        public function canEdit($member = null) { 
     673                if(!isset($member)) { 
     674                        $member = Member::currentUser(); 
     675                } 
     676                if($member && $member->isAdmin()) { 
     677                        return true; 
     678                } 
     679                 
     680                $args = array($member, true); 
     681                $this->extend('alternateCanEdit', $args); 
     682                if($args[1] == false) return false; 
     683                 
     684                if((Permission::check('CMS_ACCESS_CMSMain') && 
     685                                                (($this->Editors == 'LoggedInUsers' && $member) || 
     686                                          ($this->Editors == 'OnlyTheseUsers' && $member && 
     687                                                $member->isInGroup($this->EditorsGroup)))) == false) 
     688                                        return false; 
     689                 
     690                return true; 
    611691        } 
    612692 
    613693        /** 
     
    619699         * 
    620700         * @return boolean True if the current user can publish this page. 
    621701         */ 
    622         public function canPublish() { 
     702        public function canPublish($member = null) { 
     703                if(!isset($member)) { 
     704                        $member = Member::currentUser(); 
     705                } 
     706                if($member && $member->isAdmin()) { 
     707                        return true; 
     708                } 
     709                 
     710                $args = array($member, true); 
     711                $this->extend('alternateCanPublish', $args); 
     712                if($args[1] == false) return false; 
     713                 
    623714                return $this->canEdit(); 
    624715        } 
    625716