fine grained permission bits
This commit is contained in:
parent
bff5a8453f
commit
0589f9d72e
@ -119,7 +119,7 @@ class Image {
|
|||||||
if($limit < 1) $limit = 1;
|
if($limit < 1) $limit = 1;
|
||||||
|
|
||||||
if(SPEED_HAX) {
|
if(SPEED_HAX) {
|
||||||
if($user->is_anonymous() and count($tags) > 3) {
|
if(!$user->can("big_search") and count($tags) > 3) {
|
||||||
die("Anonymous users may only search for up to 3 tags at a time"); // FIXME: throw an exception?
|
die("Anonymous users may only search for up to 3 tags at a time"); // FIXME: throw an exception?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,10 +4,6 @@ function _new_user($row) {
|
|||||||
return new User($row);
|
return new User($row);
|
||||||
}
|
}
|
||||||
|
|
||||||
$_perm_map = array(
|
|
||||||
"override_config" => "admin",
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An object representing a row in the "users" table.
|
* An object representing a row in the "users" table.
|
||||||
@ -96,12 +92,74 @@ class User {
|
|||||||
* useful user object functions start here
|
* useful user object functions start here
|
||||||
*/
|
*/
|
||||||
public function can($ability) {
|
public function can($ability) {
|
||||||
global $_perm_map;
|
global $config;
|
||||||
$needed = $_perm_map[$ability];
|
|
||||||
if($needed == "admin" && $this->is_admin()) return true;
|
// TODO: make this into an editable database table
|
||||||
if($needed == "user" && $this->is_logged_in()) return true;
|
$user_classes = array(
|
||||||
if($needed == "anon") return true;
|
"anonymous" => array(
|
||||||
return false;
|
"change_setting" => False, # web-level settings, eg the config table
|
||||||
|
"override_config" => False, # sys-level config, eg config.php
|
||||||
|
"big_search" => False, # more than 3 tags (speed mode only)
|
||||||
|
"lock_image" => False,
|
||||||
|
"view_ip" => False, # view IP addresses associated with things
|
||||||
|
"change_password" => False,
|
||||||
|
"change_user_info" => False,
|
||||||
|
"delete_user" => False,
|
||||||
|
"delete_image" => False,
|
||||||
|
"delete_comment" => False,
|
||||||
|
"replace_image" => False,
|
||||||
|
"manage_extension_list" => False,
|
||||||
|
"manage_alias_list" => False,
|
||||||
|
"edit_tag" => $config->get_bool("tag_edit_anon"),
|
||||||
|
"edit_source" => $config->get_bool("source_edit_anon"),
|
||||||
|
"mass_tag_edit" => False,
|
||||||
|
),
|
||||||
|
"user" => array(
|
||||||
|
"change_setting" => False,
|
||||||
|
"override_config" => False,
|
||||||
|
"big_search" => True,
|
||||||
|
"lock_image" => False,
|
||||||
|
"view_ip" => False,
|
||||||
|
"change_password" => False,
|
||||||
|
"change_user_info" => False,
|
||||||
|
"delete_user" => False,
|
||||||
|
"delete_image" => False,
|
||||||
|
"delete_comment" => False,
|
||||||
|
"replace_image" => False,
|
||||||
|
"manage_extension_list" => False,
|
||||||
|
"manage_alias_list" => False,
|
||||||
|
"edit_tag" => True,
|
||||||
|
"edit_source" => True,
|
||||||
|
"mass_tag_edit" => False,
|
||||||
|
),
|
||||||
|
"admin" => array(
|
||||||
|
"change_setting" => True,
|
||||||
|
"override_config" => True,
|
||||||
|
"big_search" => True,
|
||||||
|
"lock_image" => True,
|
||||||
|
"view_ip" => True,
|
||||||
|
"change_password" => True,
|
||||||
|
"change_user_info" => True,
|
||||||
|
"delete_user" => True,
|
||||||
|
"delete_image" => True,
|
||||||
|
"delete_comment" => True,
|
||||||
|
"replace_image" => True,
|
||||||
|
"manage_extension_list" => True,
|
||||||
|
"manage_alias_list" => True,
|
||||||
|
"edit_tag" => True,
|
||||||
|
"edit_source" => True,
|
||||||
|
"mass_tag_edit" => True,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $user_classes[$this->get_class()][$action];
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: this should be a column in the users table
|
||||||
|
public function get_class() {
|
||||||
|
if($this->is_admin()) return "admin";
|
||||||
|
else if($this->is_logged_in()) return "user";
|
||||||
|
else return"anonymous";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ class AliasEditor extends SimpleExtension {
|
|||||||
|
|
||||||
if($event->page_matches("alias")) {
|
if($event->page_matches("alias")) {
|
||||||
if($event->get_arg(0) == "add") {
|
if($event->get_arg(0) == "add") {
|
||||||
if($user->is_admin()) {
|
if($user->can("manage_alias_list")) {
|
||||||
if(isset($_POST['oldtag']) && isset($_POST['newtag'])) {
|
if(isset($_POST['oldtag']) && isset($_POST['newtag'])) {
|
||||||
try {
|
try {
|
||||||
$aae = new AddAliasEvent($_POST['oldtag'], $_POST['newtag']);
|
$aae = new AddAliasEvent($_POST['oldtag'], $_POST['newtag']);
|
||||||
@ -43,7 +43,7 @@ class AliasEditor extends SimpleExtension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if($event->get_arg(0) == "remove") {
|
else if($event->get_arg(0) == "remove") {
|
||||||
if($user->is_admin()) {
|
if($user->can("manage_alias_list")) {
|
||||||
if(isset($_POST['oldtag'])) {
|
if(isset($_POST['oldtag'])) {
|
||||||
$database->execute("DELETE FROM aliases WHERE oldtag=:oldtag", array("oldtag" => $_POST['oldtag']));
|
$database->execute("DELETE FROM aliases WHERE oldtag=:oldtag", array("oldtag" => $_POST['oldtag']));
|
||||||
log_info("alias_editor", "Deleted alias for ".$_POST['oldtag']);
|
log_info("alias_editor", "Deleted alias for ".$_POST['oldtag']);
|
||||||
@ -74,7 +74,7 @@ class AliasEditor extends SimpleExtension {
|
|||||||
|
|
||||||
$total_pages = ceil($database->get_one("SELECT COUNT(*) FROM aliases") / $alias_per_page);
|
$total_pages = ceil($database->get_one("SELECT COUNT(*) FROM aliases") / $alias_per_page);
|
||||||
|
|
||||||
$this->theme->display_aliases($page, $alias, $user->is_admin(), $page_number + 1, $total_pages);
|
$this->theme->display_aliases($alias, $page_number + 1, $total_pages);
|
||||||
}
|
}
|
||||||
else if($event->get_arg(0) == "export") {
|
else if($event->get_arg(0) == "export") {
|
||||||
$page->set_mode("data");
|
$page->set_mode("data");
|
||||||
@ -82,7 +82,7 @@ class AliasEditor extends SimpleExtension {
|
|||||||
$page->set_data($this->get_alias_csv($database));
|
$page->set_data($this->get_alias_csv($database));
|
||||||
}
|
}
|
||||||
else if($event->get_arg(0) == "import") {
|
else if($event->get_arg(0) == "import") {
|
||||||
if($user->is_admin()) {
|
if($user->can("manage_alias_list")) {
|
||||||
if(count($_FILES) > 0) {
|
if(count($_FILES) > 0) {
|
||||||
$tmp = $_FILES['alias_file']['tmp_name'];
|
$tmp = $_FILES['alias_file']['tmp_name'];
|
||||||
$contents = file_get_contents($tmp);
|
$contents = file_get_contents($tmp);
|
||||||
@ -115,7 +115,7 @@ class AliasEditor extends SimpleExtension {
|
|||||||
|
|
||||||
public function onUserBlockBuilding(UserBlockBuildingEvent $event) {
|
public function onUserBlockBuilding(UserBlockBuildingEvent $event) {
|
||||||
global $user;
|
global $user;
|
||||||
if($user->is_admin()) {
|
if($user->can("manage_alias_list")) {
|
||||||
$event->add_link("Alias Editor", make_link("alias/list"));
|
$event->add_link("Alias Editor", make_link("alias/list"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,10 +5,13 @@ class AliasEditorTheme extends Themelet {
|
|||||||
* Show a page of aliases:
|
* Show a page of aliases:
|
||||||
*
|
*
|
||||||
* $aliases = an array of ($old_tag => $new_tag)
|
* $aliases = an array of ($old_tag => $new_tag)
|
||||||
* $is_admin = whether things like "add new alias" should be shown
|
* $can_manage = whether things like "add new alias" should be shown
|
||||||
*/
|
*/
|
||||||
public function display_aliases(Page $page, $aliases, $is_admin, $pageNumber, $totalPages) {
|
public function display_aliases($aliases, $pageNumber, $totalPages) {
|
||||||
if($is_admin) {
|
global $page, $user;
|
||||||
|
|
||||||
|
$can_manage = $user->can("manage_alias_list");
|
||||||
|
if($can_manage) {
|
||||||
$action = "<th width='10%'>Action</th>";
|
$action = "<th width='10%'>Action</th>";
|
||||||
$add = "
|
$add = "
|
||||||
<tr>
|
<tr>
|
||||||
@ -33,7 +36,7 @@ class AliasEditorTheme extends Themelet {
|
|||||||
$oe = ($n++ % 2 == 0) ? "even" : "odd";
|
$oe = ($n++ % 2 == 0) ? "even" : "odd";
|
||||||
|
|
||||||
$h_aliases .= "<tr class='$oe'><td>$h_old</td><td>$h_new</td>";
|
$h_aliases .= "<tr class='$oe'><td>$h_old</td><td>$h_new</td>";
|
||||||
if($is_admin) {
|
if($can_manage) {
|
||||||
$h_aliases .= "
|
$h_aliases .= "
|
||||||
<td>
|
<td>
|
||||||
".make_form(make_link("alias/remove"))."
|
".make_form(make_link("alias/remove"))."
|
||||||
@ -70,7 +73,7 @@ class AliasEditorTheme extends Themelet {
|
|||||||
$page->set_heading("Alias List");
|
$page->set_heading("Alias List");
|
||||||
$page->add_block(new NavBlock());
|
$page->add_block(new NavBlock());
|
||||||
$page->add_block(new Block("Aliases", $html));
|
$page->add_block(new Block("Aliases", $html));
|
||||||
if($is_admin) {
|
if($can_manage) {
|
||||||
$page->add_block(new Block("Bulk Upload", $bulk_html, "main", 51));
|
$page->add_block(new Block("Bulk Upload", $bulk_html, "main", 51));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ class CommentList extends SimpleExtension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if($event->get_arg(0) === "delete") {
|
else if($event->get_arg(0) === "delete") {
|
||||||
if($user->is_admin()) {
|
if($user->can("delete_comment")) {
|
||||||
// FIXME: post, not args
|
// FIXME: post, not args
|
||||||
if($event->count_args() === 3) {
|
if($event->count_args() === 3) {
|
||||||
send_event(new CommentDeletionEvent($event->get_arg(1)));
|
send_event(new CommentDeletionEvent($event->get_arg(1)));
|
||||||
|
@ -170,10 +170,9 @@ class CommentListTheme extends Themelet {
|
|||||||
$hash = md5(strtolower($comment->owner_email));
|
$hash = md5(strtolower($comment->owner_email));
|
||||||
$avatar = "<img src=\"http://www.gravatar.com/avatar/$hash.jpg\"><br>";
|
$avatar = "<img src=\"http://www.gravatar.com/avatar/$hash.jpg\"><br>";
|
||||||
}
|
}
|
||||||
$a = $user->is_admin();
|
|
||||||
$h_reply = " - <a href='javascript: replyTo($i_image_id, $i_comment_id)'>Reply</a>";
|
$h_reply = " - <a href='javascript: replyTo($i_image_id, $i_comment_id)'>Reply</a>";
|
||||||
$h_ip = $a ? "<br>$h_poster_ip" : "";
|
$h_ip = $user->can("view_ip") ? "<br>$h_poster_ip" : "";
|
||||||
$h_del = $a ?
|
$h_del = $user->can("delete_comment") ?
|
||||||
' - <a onclick="return confirm(\'Delete comment by '.$h_name.':\\n'.$stripped_nonl.'\');" '.
|
' - <a onclick="return confirm(\'Delete comment by '.$h_name.':\\n'.$stripped_nonl.'\');" '.
|
||||||
'href="'.make_link('comment/delete/'.$i_comment_id.'/'.$i_image_id).'">Del</a>' : '';
|
'href="'.make_link('comment/delete/'.$i_comment_id.'/'.$i_image_id).'">Del</a>' : '';
|
||||||
return '
|
return '
|
||||||
|
@ -91,7 +91,7 @@ class ExtManager extends SimpleExtension {
|
|||||||
public function onPageRequest(PageRequestEvent $event) {
|
public function onPageRequest(PageRequestEvent $event) {
|
||||||
global $page, $user;
|
global $page, $user;
|
||||||
if($event->page_matches("ext_manager")) {
|
if($event->page_matches("ext_manager")) {
|
||||||
if($user->is_admin()) {
|
if($user->can("manage_extension_list")) {
|
||||||
if($event->get_arg(0) == "set" && $user->check_auth_token()) {
|
if($event->get_arg(0) == "set" && $user->check_auth_token()) {
|
||||||
if(is_writable("ext")) {
|
if(is_writable("ext")) {
|
||||||
$this->set_things($_POST);
|
$this->set_things($_POST);
|
||||||
@ -130,7 +130,7 @@ class ExtManager extends SimpleExtension {
|
|||||||
|
|
||||||
public function onUserBlockBuilding(UserBlockBuildingEvent $event) {
|
public function onUserBlockBuilding(UserBlockBuildingEvent $event) {
|
||||||
global $user;
|
global $user;
|
||||||
if($user->is_admin()) {
|
if($user->can("manage_extension_list")) {
|
||||||
$event->add_link("Extension Manager", make_link("ext_manager"));
|
$event->add_link("Extension Manager", make_link("ext_manager"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -162,7 +162,7 @@ class ImageIO extends SimpleExtension {
|
|||||||
}
|
}
|
||||||
if($event->page_matches("image_admin/delete")) {
|
if($event->page_matches("image_admin/delete")) {
|
||||||
global $page, $user;
|
global $page, $user;
|
||||||
if($user->is_admin() && isset($_POST['image_id']) && $user->check_auth_token()) {
|
if($user->can("delete_image") && isset($_POST['image_id']) && $user->check_auth_token()) {
|
||||||
$image = Image::by_id($_POST['image_id']);
|
$image = Image::by_id($_POST['image_id']);
|
||||||
if($image) {
|
if($image) {
|
||||||
send_event(new ImageDeletionEvent($image));
|
send_event(new ImageDeletionEvent($image));
|
||||||
@ -173,7 +173,7 @@ class ImageIO extends SimpleExtension {
|
|||||||
}
|
}
|
||||||
if($event->page_matches("image_admin/replace")) {
|
if($event->page_matches("image_admin/replace")) {
|
||||||
global $page, $user;
|
global $page, $user;
|
||||||
if($user->is_admin() && isset($_POST['image_id']) && $user->check_auth_token()) {
|
if($user->can("replace_image") && isset($_POST['image_id']) && $user->check_auth_token()) {
|
||||||
$image = Image::by_id($_POST['image_id']);
|
$image = Image::by_id($_POST['image_id']);
|
||||||
if($image) {
|
if($image) {
|
||||||
$page->set_mode("redirect");
|
$page->set_mode("redirect");
|
||||||
@ -190,11 +190,11 @@ class ImageIO extends SimpleExtension {
|
|||||||
global $user;
|
global $user;
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
if($user->is_admin()) {
|
if($user->can("delete_image")) {
|
||||||
$event->add_part($this->theme->get_deleter_html($event->image->id));
|
$event->add_part($this->theme->get_deleter_html($event->image->id));
|
||||||
}
|
}
|
||||||
/* In the future, could perhaps allow users to replace images that they own as well... */
|
/* In the future, could perhaps allow users to replace images that they own as well... */
|
||||||
if ($user->is_admin() && $config->get_bool("upload_replace")) {
|
if ($user->can("replace_image") && $config->get_bool("upload_replace")) {
|
||||||
$event->add_part($this->theme->get_replace_html($event->image->id));
|
$event->add_part($this->theme->get_replace_html($event->image->id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,7 +187,7 @@ class Setup extends SimpleExtension {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($event->page_matches("setup")) {
|
if($event->page_matches("setup")) {
|
||||||
if(!$user->is_admin()) {
|
if(!$user->can("change_setting")) {
|
||||||
$this->theme->display_permission_denied($page);
|
$this->theme->display_permission_denied($page);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -329,7 +329,7 @@ class Setup extends SimpleExtension {
|
|||||||
|
|
||||||
public function onUserBlockBuilding(UserBlockBuildingEvent $event) {
|
public function onUserBlockBuilding(UserBlockBuildingEvent $event) {
|
||||||
global $user;
|
global $user;
|
||||||
if($user->is_admin()) {
|
if($user->can("change_setting")) {
|
||||||
$event->add_link("Board Config", make_link("setup"));
|
$event->add_link("Board Config", make_link("setup"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ class TagEdit extends SimpleExtension {
|
|||||||
global $user, $page;
|
global $user, $page;
|
||||||
if($event->page_matches("tag_edit")) {
|
if($event->page_matches("tag_edit")) {
|
||||||
if($event->get_arg(0) == "replace") {
|
if($event->get_arg(0) == "replace") {
|
||||||
if($user->is_admin() && isset($_POST['search']) && isset($_POST['replace'])) {
|
if($user->can("mass_tag_edit") && isset($_POST['search']) && isset($_POST['replace'])) {
|
||||||
$search = $_POST['search'];
|
$search = $_POST['search'];
|
||||||
$replace = $_POST['replace'];
|
$replace = $_POST['replace'];
|
||||||
$this->mass_tag_edit($search, $replace);
|
$this->mass_tag_edit($search, $replace);
|
||||||
@ -82,7 +82,7 @@ class TagEdit extends SimpleExtension {
|
|||||||
else {
|
else {
|
||||||
$this->theme->display_error($page, "Error", "Anonymous tag editing is disabled");
|
$this->theme->display_error($page, "Error", "Anonymous tag editing is disabled");
|
||||||
}
|
}
|
||||||
if($user->is_admin()) {
|
if($user->can("lock_image")) {
|
||||||
$locked = isset($_POST['tag_edit__locked']) && $_POST['tag_edit__locked']=="on";
|
$locked = isset($_POST['tag_edit__locked']) && $_POST['tag_edit__locked']=="on";
|
||||||
send_event(new LockSetEvent($event->image, $locked));
|
send_event(new LockSetEvent($event->image, $locked));
|
||||||
}
|
}
|
||||||
@ -90,21 +90,21 @@ class TagEdit extends SimpleExtension {
|
|||||||
|
|
||||||
public function onTagSet(TagSetEvent $event) {
|
public function onTagSet(TagSetEvent $event) {
|
||||||
global $user;
|
global $user;
|
||||||
if($user->is_admin() || !$event->image->is_locked()) {
|
if($user->can("edit_tag") || !$event->image->is_locked()) {
|
||||||
$event->image->set_tags($event->tags);
|
$event->image->set_tags($event->tags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onSourceSet(SourceSetEvent $event) {
|
public function onSourceSet(SourceSetEvent $event) {
|
||||||
global $user;
|
global $user;
|
||||||
if($user->is_admin() || !$event->image->is_locked()) {
|
if($user->can("edit_tag") || !$event->image->is_locked()) {
|
||||||
$event->image->set_source($event->source);
|
$event->image->set_source($event->source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onLockSet(LockSetEvent $event) {
|
public function onLockSet(LockSetEvent $event) {
|
||||||
global $user;
|
global $user;
|
||||||
if($user->is_admin()) {
|
if($user->can("lock_image")) {
|
||||||
$event->image->set_locked($event->locked);
|
$event->image->set_locked($event->locked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ class TagEdit extends SimpleExtension {
|
|||||||
if($this->can_source($event->image)) {
|
if($this->can_source($event->image)) {
|
||||||
$event->add_part($this->theme->get_source_editor_html($event->image), 41);
|
$event->add_part($this->theme->get_source_editor_html($event->image), 41);
|
||||||
}
|
}
|
||||||
if($user->is_admin()) {
|
if($user->can("lock_image")) {
|
||||||
$event->add_part($this->theme->get_lock_editor_html($event->image), 42);
|
$event->add_part($this->theme->get_lock_editor_html($event->image), 42);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,7 +147,7 @@ class TagEdit extends SimpleExtension {
|
|||||||
global $config, $user;
|
global $config, $user;
|
||||||
return (
|
return (
|
||||||
($config->get_bool("tag_edit_anon") || !$user->is_anonymous()) &&
|
($config->get_bool("tag_edit_anon") || !$user->is_anonymous()) &&
|
||||||
($user->is_admin() || !$image->is_locked())
|
($user->can("edit_tag") || !$image->is_locked())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ class TagEdit extends SimpleExtension {
|
|||||||
global $config, $user;
|
global $config, $user;
|
||||||
return (
|
return (
|
||||||
($config->get_bool("source_edit_anon") || !$user->is_anonymous()) &&
|
($config->get_bool("source_edit_anon") || !$user->is_anonymous()) &&
|
||||||
($user->is_admin() || !$image->is_locked())
|
($user->can("edit_source") || !$image->is_locked())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ class Upload extends SimpleExtension {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check if the user is an administrator and can upload files.
|
// check if the user is an administrator and can upload files.
|
||||||
if(!$user->is_admin()) {
|
if(!$user->can("replace_image")) {
|
||||||
$this->theme->display_permission_denied($page);
|
$this->theme->display_permission_denied($page);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -308,7 +308,7 @@ class Upload extends SimpleExtension {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Checks if user is admin > check if you want locked.
|
// Checks if user is admin > check if you want locked.
|
||||||
if($user->is_admin() && !empty($_GET['locked'])){
|
if($user->can("lock_image") && !empty($_GET['locked'])){
|
||||||
$locked = bool_escape($_GET['locked']);
|
$locked = bool_escape($_GET['locked']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ class UserPage extends SimpleExtension {
|
|||||||
$this->theme->display_user_links($page, $user, $ubbe->parts);
|
$this->theme->display_user_links($page, $user, $ubbe->parts);
|
||||||
}
|
}
|
||||||
if(
|
if(
|
||||||
($user->is_admin() || ($user->is_logged_in() && $user->id == $event->display_user->id)) && # admin or self-user
|
($user->can("view_ip") || ($user->is_logged_in() && $user->id == $event->display_user->id)) && # admin or self-user
|
||||||
($event->display_user->id != $config->get_int('anon_id')) # don't show anon's IP list, it is le huge
|
($event->display_user->id != $config->get_int('anon_id')) # don't show anon's IP list, it is le huge
|
||||||
) {
|
) {
|
||||||
$this->theme->display_ip_list(
|
$this->theme->display_ip_list(
|
||||||
@ -256,7 +256,7 @@ class UserPage extends SimpleExtension {
|
|||||||
$user_id = int_escape($matches[2]);
|
$user_id = int_escape($matches[2]);
|
||||||
$event->add_querylet(new Querylet("images.owner_id = $user_id"));
|
$event->add_querylet(new Querylet("images.owner_id = $user_id"));
|
||||||
}
|
}
|
||||||
else if($user->is_admin() && preg_match("/^(poster|user)_ip=([0-9\.]+)$/i", $event->term, $matches)) {
|
else if($user->can("view_ip") && preg_match("/^(poster|user)_ip=([0-9\.]+)$/i", $event->term, $matches)) {
|
||||||
$user_ip = $matches[2]; // FIXME: ip_escape?
|
$user_ip = $matches[2]; // FIXME: ip_escape?
|
||||||
$event->add_querylet(new Querylet("images.owner_ip = '$user_ip'"));
|
$event->add_querylet(new Querylet("images.owner_ip = '$user_ip'"));
|
||||||
}
|
}
|
||||||
@ -354,7 +354,7 @@ class UserPage extends SimpleExtension {
|
|||||||
|
|
||||||
$duser = User::by_id($id);
|
$duser = User::by_id($id);
|
||||||
|
|
||||||
if((!$user->is_admin()) && ($duser->name != $user->name)) {
|
if((!$user->can("change_user_info")) && ($duser->name != $user->name)) {
|
||||||
$this->theme->display_error($page, "Error",
|
$this->theme->display_error($page, "Error",
|
||||||
"You need to be an admin to change other people's passwords");
|
"You need to be an admin to change other people's passwords");
|
||||||
}
|
}
|
||||||
@ -392,7 +392,7 @@ class UserPage extends SimpleExtension {
|
|||||||
|
|
||||||
$duser = User::by_id($id);
|
$duser = User::by_id($id);
|
||||||
|
|
||||||
if((!$user->is_admin()) && ($duser->name != $user->name)) {
|
if((!$user->can("change_user_info")) && ($duser->name != $user->name)) {
|
||||||
$this->theme->display_error($page, "Error",
|
$this->theme->display_error($page, "Error",
|
||||||
"You need to be an admin to change other people's addressess");
|
"You need to be an admin to change other people's addressess");
|
||||||
}
|
}
|
||||||
@ -419,7 +419,7 @@ class UserPage extends SimpleExtension {
|
|||||||
$page->set_title("Error");
|
$page->set_title("Error");
|
||||||
$page->set_heading("Error");
|
$page->set_heading("Error");
|
||||||
$page->add_block(new NavBlock());
|
$page->add_block(new NavBlock());
|
||||||
if(!$user->is_admin()) {
|
if(!$user->can("change_user_info")) {
|
||||||
$page->add_block(new Block("Not Admin", "Only admins can edit accounts"));
|
$page->add_block(new Block("Not Admin", "Only admins can edit accounts"));
|
||||||
}
|
}
|
||||||
else if(!isset($_POST['id']) || !is_numeric($_POST['id'])) {
|
else if(!isset($_POST['id']) || !is_numeric($_POST['id'])) {
|
||||||
@ -479,7 +479,7 @@ class UserPage extends SimpleExtension {
|
|||||||
$page->set_heading("Error");
|
$page->set_heading("Error");
|
||||||
$page->add_block(new NavBlock());
|
$page->add_block(new NavBlock());
|
||||||
|
|
||||||
if (!$user->is_admin()) {
|
if (!$user->can("delete_user")) {
|
||||||
$page->add_block(new Block("Not Admin", "Only admins can delete accounts"));
|
$page->add_block(new Block("Not Admin", "Only admins can delete accounts"));
|
||||||
}
|
}
|
||||||
else if(!isset($_POST['id']) || !is_numeric($_POST['id'])) {
|
else if(!isset($_POST['id']) || !is_numeric($_POST['id'])) {
|
||||||
@ -510,7 +510,7 @@ class UserPage extends SimpleExtension {
|
|||||||
$page->set_heading("Error");
|
$page->set_heading("Error");
|
||||||
$page->add_block(new NavBlock());
|
$page->add_block(new NavBlock());
|
||||||
|
|
||||||
if (!$user->is_admin()) {
|
if (!$user->can("delete_user") || !$user->can("delete_image")) {
|
||||||
$page->add_block(new Block("Not Admin", "Only admins can delete accounts"));
|
$page->add_block(new Block("Not Admin", "Only admins can delete accounts"));
|
||||||
}
|
}
|
||||||
else if(!isset($_POST['id']) || !is_numeric($_POST['id'])) {
|
else if(!isset($_POST['id']) || !is_numeric($_POST['id'])) {
|
||||||
|
@ -141,7 +141,7 @@ class UserPageTheme extends Themelet {
|
|||||||
$page->add_block(new Block("Stats", join("<br>", $stats), "main", 0));
|
$page->add_block(new Block("Stats", join("<br>", $stats), "main", 0));
|
||||||
|
|
||||||
if(!$user->is_anonymous()) {
|
if(!$user->is_anonymous()) {
|
||||||
if($user->id == $duser->id || $user->is_admin()) {
|
if($user->id == $duser->id || $user->can("change_user_info")) {
|
||||||
$page->add_block(new Block("Options", $this->build_options($duser), "main", 20));
|
$page->add_block(new Block("Options", $this->build_options($duser), "main", 20));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -173,7 +173,7 @@ class UserPageTheme extends Themelet {
|
|||||||
</form>
|
</form>
|
||||||
";
|
";
|
||||||
|
|
||||||
if($user->is_admin()) {
|
if($user->can("change_user_info")) {
|
||||||
$i_user_id = int_escape($duser->id);
|
$i_user_id = int_escape($duser->id);
|
||||||
$h_is_admin = $duser->is_admin() ? " checked" : "";
|
$h_is_admin = $duser->is_admin() ? " checked" : "";
|
||||||
$html .= "
|
$html .= "
|
||||||
|
@ -90,7 +90,7 @@ class ViewImageTheme extends Themelet {
|
|||||||
$html = "";
|
$html = "";
|
||||||
$html .= "<p>Uploaded by <a href='".make_link("user/$h_owner")."'>$h_owner</a> $h_date";
|
$html .= "<p>Uploaded by <a href='".make_link("user/$h_owner")."'>$h_owner</a> $h_date";
|
||||||
|
|
||||||
if($user->is_admin()) {
|
if($user->can("view_ip")) {
|
||||||
$html .= " ($h_ip)";
|
$html .= " ($h_ip)";
|
||||||
}
|
}
|
||||||
if(!is_null($image->source)) {
|
if(!is_null($image->source)) {
|
||||||
|
@ -45,25 +45,8 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
$("#commentBox").DefaultValue("Comment");
|
$("#commentBox").DefaultValue("Comment");
|
||||||
$("#tagBox").DefaultValue("tagme");
|
$("#tagBox").DefaultValue("tagme");
|
||||||
|
|
||||||
// if we're going to show with JS, hide with JS first
|
|
||||||
pass_confirm = byId("pass_confirm");
|
|
||||||
if(pass_confirm) {
|
|
||||||
pass_confirm.style.display = "none";
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function showUp(elem) {
|
|
||||||
e = document.getElementById(elem)
|
|
||||||
if(!e) return;
|
|
||||||
e.style.display = "";
|
|
||||||
// alert(e.type+": "+e.value);
|
|
||||||
if(e.value.match(/^http|^ftp/)) {
|
|
||||||
e.type = "text";
|
|
||||||
alert("Box is web upload");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
|
||||||
* LibShish-JS *
|
* LibShish-JS *
|
||||||
@ -83,6 +66,7 @@ function byId(id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// used once in ext/setup/main
|
||||||
function getHTTPObject() {
|
function getHTTPObject() {
|
||||||
if (window.XMLHttpRequest){
|
if (window.XMLHttpRequest){
|
||||||
return new XMLHttpRequest();
|
return new XMLHttpRequest();
|
||||||
@ -92,15 +76,6 @@ function getHTTPObject() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function ajaxRequest(url, callback) {
|
|
||||||
var http = getHTTPObject();
|
|
||||||
http.open("GET", url, true);
|
|
||||||
http.onreadystatechange = function() {
|
|
||||||
if(http.readyState == 4) callback(http.responseText);
|
|
||||||
}
|
|
||||||
http.send(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* get, set, and delete cookies */
|
/* get, set, and delete cookies */
|
||||||
function getCookie( name ) {
|
function getCookie( name ) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user