]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Move rights check to profile and add right for new notices
authorEvan Prodromou <evan@status.net>
Mon, 16 Nov 2009 18:03:59 +0000 (19:03 +0100)
committerEvan Prodromou <evan@status.net>
Mon, 16 Nov 2009 18:03:59 +0000 (19:03 +0100)
Added a right for new notices, realized that the hasRight() method
should be on the profile, and moved it.

Makes this a less atomic commit but that's the way it goes sometimes.

classes/Notice.php
classes/Profile.php
classes/User.php
lib/right.php

index 291e6202ba36b2569de4977763dc03d5d5e27be9..fde40240f350026f0d5963ee5c592f0899281bf2 100644 (file)
@@ -195,10 +195,8 @@ class Notice extends Memcached_DataObject
                                         ' take a breather and post again in a few minutes.'));
         }
 
-        $banned = common_config('profile', 'banned');
-
-        if ( in_array($profile_id, $banned) || in_array($profile->nickname, $banned)) {
-            common_log(LOG_WARNING, "Attempted post from banned user: $profile->nickname (user id = $profile_id).");
+        if (!$profile->hasRight(Right::NEWNOTICE)) {
+            common_log(LOG_WARNING, "Attempted post from user disallowed to post: " . $profile->nickname);
             throw new ClientException(_('You are banned from posting notices on this site.'));
         }
 
index 5b4394d3b725a522f86019803d8634161d9af02b..e3b35533ad5224fb6f0d6d80fc126bde9a47aa26 100644 (file)
@@ -661,4 +661,42 @@ class Profile extends Memcached_DataObject
     {
         $this->revokeRole(Profile_role::SILENCED);
     }
+
+    /**
+     * Does this user have the right to do X?
+     *
+     * With our role-based authorization, this is merely a lookup for whether the user
+     * has a particular role. The implementation currently uses a switch statement
+     * to determine if the user has the pre-defined role to exercise the right. Future
+     * implementations may allow per-site roles, and different mappings of roles to rights.
+     *
+     * @param $right string Name of the right, usually a constant in class Right
+     * @return boolean whether the user has the right in question
+     */
+
+    function hasRight($right)
+    {
+        $result = false;
+        if (Event::handle('UserRightsCheck', array($this, $right, &$result))) {
+            switch ($right)
+            {
+            case Right::DELETEOTHERSNOTICE:
+            case Right::SANDBOXUSER:
+            case Right::SILENCEUSER:
+            case Right::DELETEUSER:
+                $result = $this->hasRole(Profile_role::MODERATOR);
+                break;
+            case Right::CONFIGURESITE:
+                $result = $this->hasRole(Profile_role::ADMINISTRATOR);
+                break;
+            case Right::NEWNOTICE:
+                $result = !$this->isSilenced();
+                break;
+            default:
+                $result = false;
+                break;
+            }
+        }
+        return $result;
+    }
 }
index 82d3bd59ae2913fe1edd91475567f6822c4b2849..a466369a1e6f3f35dece61a32569da36af90912a 100644 (file)
@@ -657,39 +657,10 @@ class User extends Memcached_DataObject
         return Design::staticGet('id', $this->design_id);
     }
 
-    /**
-     * Does this user have the right to do X?
-     *
-     * With our role-based authorization, this is merely a lookup for whether the user
-     * has a particular role. The implementation currently uses a switch statement
-     * to determine if the user has the pre-defined role to exercise the right. Future
-     * implementations may allow per-site roles, and different mappings of roles to rights.
-     *
-     * @param $right string Name of the right, usually a constant in class Right
-     * @return boolean whether the user has the right in question
-     */
-
     function hasRight($right)
     {
-        $result = false;
-        if (Event::handle('UserRightsCheck', array($this, $right, &$result))) {
-            switch ($right)
-            {
-            case Right::DELETEOTHERSNOTICE:
-            case Right::SANDBOXUSER:
-            case Right::SILENCEUSER:
-            case Right::DELETEUSER:
-                $result = $this->hasRole(Profile_role::MODERATOR);
-                break;
-            case Right::CONFIGURESITE:
-                $result = $this->hasRole(Profile_role::ADMINISTRATOR);
-                break;
-            default:
-                $result = false;
-                break;
-            }
-        }
-        return $result;
+        $profile = $this->getProfile();
+        return $profile->hasRight($right);
     }
 
     function delete()
index 88abdf78055ac04ce2caf21808e5871bd5ec870c..ae8516602e9ab5742cdb819a55e6d565cba5d55c 100644 (file)
@@ -50,5 +50,6 @@ class Right
     const DELETEUSER         = 'deleteuser';
     const SILENCEUSER        = 'silenceuser';
     const SANDBOXUSER        = 'sandboxuser';
+    const NEWNOTICE          = 'newnotice';
 }