more perms work (a lot more)
This commit is contained in:
parent
32ce790717
commit
b63165b6e0
@ -70,5 +70,47 @@ class Permissions {
|
||||
|
||||
}
|
||||
|
||||
// converts [ 0 => 'view_stream', ... ]
|
||||
// to [ 'view_stream' => 1 ]
|
||||
// for any permissions in $arr;
|
||||
// Undeclared permissions are set to 0
|
||||
|
||||
static public function FilledPerms($arr) {
|
||||
$everything = self::Perms();
|
||||
$ret = [];
|
||||
foreach($everything as $k => $v) {
|
||||
if(in_array($k,$arr))
|
||||
$ret[$k] = 1;
|
||||
else
|
||||
$ret[$k] = 0;
|
||||
}
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
static public function FilledAutoperms($channel_id) {
|
||||
if(! intval(get_pconfig($channel_id,'system','autoperms')))
|
||||
return false;
|
||||
|
||||
$arr = [];
|
||||
$r = q("select * from pconfig where uid = %d and cat = 'autoperms'",
|
||||
intval($channel_id)
|
||||
);
|
||||
if($r) {
|
||||
foreach($r as $rr) {
|
||||
$arr[$rr['k']] = $arr[$rr['v']];
|
||||
}
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
static public function PermsCompare($p1,$p2) {
|
||||
foreach($p1 as $k => $v) {
|
||||
if(! array_key_exists($k,$p2))
|
||||
return false;
|
||||
if($p1[$k] != $p2[$k])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -126,9 +126,7 @@ class Connedit extends \Zotlabs\Web\Controller {
|
||||
$rating = 10;
|
||||
|
||||
$rating_text = trim(escape_tags($_REQUEST['rating_text']));
|
||||
|
||||
$abook_my_perms = 0;
|
||||
|
||||
|
||||
$all_perms = \Zotlabs\Access\Permissions::Perms();
|
||||
|
||||
if($all_perms) {
|
||||
@ -136,13 +134,21 @@ class Connedit extends \Zotlabs\Web\Controller {
|
||||
if(array_key_exists('perms_' . $perm, $_POST)) {
|
||||
set_abconfig($channel['channel_id'],$orig_record[0]['abook_xchan'],'my_perms',$perm,
|
||||
intval($_POST['perms_' . $perm]));
|
||||
$abook_my_perms ++;
|
||||
if($autoperms) {
|
||||
set_pconfig($channel['channel_id'],'autoperms',$perm,intval($_POST['perms_' . $perm]));
|
||||
}
|
||||
}
|
||||
else {
|
||||
set_abconfig($channel['channel_id'],$orig_record[0]['abook_xchan'],'my_perms',$perm,0);
|
||||
if($autoperms) {
|
||||
set_pconfig($channel['channel_id'],'autoperms',$perm,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(! is_null($autoperms))
|
||||
set_pconfig($channel['channel_id'],'system','autoperms',$autoperms);
|
||||
|
||||
$new_friend = false;
|
||||
|
||||
@ -209,14 +215,11 @@ class Connedit extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
|
||||
if($all_perms) {
|
||||
foreach($all_perms as $perm => $desc) {
|
||||
if(array_key_exists($perm, $abook_my_perms))
|
||||
set_abconfig($channel['channel_id'],$orig_record[0]['abook_xchan'],'my_perms',$perm,1);
|
||||
else
|
||||
set_abconfig($channel['channel_id'],$orig_record[0]['abook_xchan'],'my_perms',$perm,0);
|
||||
}
|
||||
$filled_perms = \Zotlabs\Access\Permissions::FilledPerms($abook_my_perms);
|
||||
foreach($filled_perms as $k => $v) {
|
||||
set_abconfig($channel['channel_id'],$orig_record[0]['abook_xchan'],'my_perms',$k,$v);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$abook_pending = (($new_friend) ? 0 : $orig_record[0]['abook_pending']);
|
||||
@ -245,10 +248,13 @@ class Connedit extends \Zotlabs\Web\Controller {
|
||||
info( t('Connection updated.') . EOL);
|
||||
else
|
||||
notice( t('Failed to update connection record.') . EOL);
|
||||
//@fixme perms
|
||||
if(\App::$poi && \App::$poi['abook_my_perms'] != $abook_my_perms
|
||||
&& (! intval(\App::$poi['abook_self']))) {
|
||||
\Zotlabs\Daemon\Master::Summon(array('Notifier', (($new_friend) ? 'permission_create' : 'permission_update'), $contact_id));
|
||||
|
||||
if(! intval(\App::$poi['abook_self'])) {
|
||||
\Zotlabs\Daemon\Master::Summon( [
|
||||
'Notifier',
|
||||
(($new_friend) ? 'permission_create' : 'permission_update'),
|
||||
$contact_id
|
||||
]);
|
||||
}
|
||||
|
||||
if($new_friend) {
|
||||
|
@ -21,10 +21,7 @@ class Settings extends \Zotlabs\Web\Controller {
|
||||
// We are setting these values - don't use the argc(), argv() functions here
|
||||
\App::$argc = 2;
|
||||
\App::$argv[] = 'channel';
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -422,20 +419,25 @@ class Settings extends \Zotlabs\Web\Controller {
|
||||
);
|
||||
}
|
||||
|
||||
foreach($global_perms as $k => $v) {
|
||||
set_abconfig(local_channel(),$channel['channel_hash'],'my_perms',$k,((array_key_exists($k,$role_permissions['perms_connect'])) ? 1 : 0));
|
||||
}
|
||||
$x = \Zotlabs\Access\Permissions::FilledPerms($role_permissions['perms_connect']);
|
||||
foreach($x as $k => $v) {
|
||||
set_abconfig(local_channel(),$channel['channel_hash'],'my_perms',$k, $v);
|
||||
if($role_permissions['perms_auto']) {
|
||||
set_pconfig(local_channel(),'autoperms',$k,$v);
|
||||
}
|
||||
else {
|
||||
del_pconfig(local_channel(),'autoperms',$k);
|
||||
}
|
||||
}
|
||||
|
||||
set_pconfig(local_channel(),'system','autoperms',(($role_permissions['perms_auto']) ? intval($role_permissions['perms_accept']) : 0));
|
||||
|
||||
foreach($role_permissions as $p => $v) {
|
||||
if(strpos($p,'channel_') !== false) {
|
||||
$set_perms .= ', ' . $p . ' = ' . intval($v) . ' ';
|
||||
}
|
||||
if($p === 'directory_publish') {
|
||||
$publish = intval($v);
|
||||
if($role_permissions['limits']) {
|
||||
foreach($role_permissions['limits'] as $k => $v) {
|
||||
\Zotlabs\Access\PermissionLimits::Set(local_channel(),$k,$v);
|
||||
}
|
||||
}
|
||||
if(array_key_exists('directory_publish',$role_permissions)) {
|
||||
$publish = intval($role_permissions['directory_publish']);
|
||||
}
|
||||
}
|
||||
|
||||
set_pconfig(local_channel(),'system','hide_online_status',$hide_presence);
|
||||
|
@ -379,8 +379,21 @@ function create_identity($arr) {
|
||||
set_pconfig($newuid,'system','permissions_role',$arr['permissions_role']);
|
||||
if(array_key_exists('online',$role_permissions))
|
||||
set_pconfig($newuid,'system','hide_presence',1-intval($role_permissions['online']));
|
||||
if(array_key_exists('perms_auto',$role_permissions))
|
||||
set_pconfig($newuid,'system','autoperms',(($role_permissions['perms_auto']) ? $role_permissions['perms_accept'] : 0));
|
||||
if(array_key_exists('perms_auto',$role_permissions)) {
|
||||
$autoperms = intval($role_permissions['perms_auto']);
|
||||
set_pconfig($newuid,'system','autoperms',$autoperms);
|
||||
if($autoperms) {
|
||||
$x = \Zotlabs\Access\Permissions::FilledPerms($role_permissions['connect']);
|
||||
foreach($x as $k => $v) {
|
||||
set_pconfig($newuid,'autoperms',$k,$v);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$r = q("delete from pconfig where uid = %d and cat = 'autoperms'",
|
||||
intval($newuid)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create a group with yourself as a member. This allows somebody to use it
|
||||
|
@ -19,44 +19,58 @@ function perm_limits_upgrade($channel) {
|
||||
set_pconfig($channel['channel_id'],'perm_limits','delegate',$channel['channel_a_delegate']);
|
||||
}
|
||||
|
||||
function perms_int_to_array($p) {
|
||||
|
||||
$ret = [];
|
||||
|
||||
$ret['view_stream'] = (($p & PERMS_R_STREAM) ? 1 : 0);
|
||||
$ret['view_profile'] = (($p & PERMS_R_PROFILE) ? 1 : 0);
|
||||
$ret['view_contacts'] = (($p & PERMS_R_ABOOK) ? 1 : 0);
|
||||
$ret['view_storage'] = (($p & PERMS_R_STORAGE) ? 1 : 0);
|
||||
$ret['view_pages'] = (($p & PERMS_R_PAGES) ? 1 : 0);
|
||||
$ret['send_stream'] = (($p & PERMS_W_STREAM) ? 1 : 0);
|
||||
$ret['post_wall'] = (($p & PERMS_W_WALL) ? 1 : 0);
|
||||
$ret['post_comments'] = (($p & PERMS_W_COMMENT) ? 1 : 0);
|
||||
$ret['post_mail'] = (($p & PERMS_W_MAIL) ? 1 : 0);
|
||||
$ret['post_like'] = (($p & PERMS_W_LIKE) ? 1 : 0);
|
||||
$ret['tag_deliver'] = (($p & PERMS_W_TAGWALL) ? 1 : 0);
|
||||
$ret['chat'] = (($p & PERMS_W_CHAT) ? 1 : 0);
|
||||
$ret['write_storage'] = (($p & PERMS_W_STORAGE) ? 1 : 0);
|
||||
$ret['write_pages'] = (($p & PERMS_W_PAGES) ? 1 : 0);
|
||||
$ret['republish'] = (($p & PERMS_A_REPUBLISH) ? 1 : 0);
|
||||
$ret['delegate'] = (($p & PERMS_A_DELEGATE) ? 1 : 0);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function autoperms_upgrade($channel) {
|
||||
$x = get_pconfig($channel['channel_id'],'system','autoperms');
|
||||
if(intval($x)) {
|
||||
$y = perms_int_to_array($x);
|
||||
if($y) {
|
||||
foreach($y as $k => $v) {
|
||||
set_pconfig($channel['channel_id'],'autoperms',$k,$v);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function perm_abook_upgrade($abook) {
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','view_stream',intval(($abook['abook_their_perms'] & PERMS_R_STREAM)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','view_profile',intval(($abook['abook_their_perms'] & PERMS_R_PROFILE)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','view_contacts',intval(($abook['abook_their_perms'] & PERMS_R_ABOOK)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','view_storage',intval(($abook['abook_their_perms'] & PERMS_R_STORAGE)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','view_pages',intval(($abook['abook_their_perms'] & PERMS_R_PAGES)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','send_stream',intval(($abook['abook_their_perms'] & PERMS_W_STREAM)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','post_wall',intval(($abook['abook_their_perms'] & PERMS_W_WALL)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','post_comments',intval(($abook['abook_their_perms'] & PERMS_W_COMMENT)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','post_mail',intval(($abook['abook_their_perms'] & PERMS_W_MAIL)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','post_like',intval(($abook['abook_their_perms'] & PERMS_W_LIKE)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','tag_deliver',intval(($abook['abook_their_perms'] & PERMS_W_TAGWALL)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','chat',intval(($abook['abook_their_perms'] & PERMS_W_CHAT)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','write_storage',intval(($abook['abook_their_perms'] & PERMS_W_STORAGE)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','write_pages',intval(($abook['abook_their_perms'] & PERMS_W_PAGES)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','republish',intval(($abook['abook_their_perms'] & PERMS_A_REPUBLISH)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms','delegate',intval(($abook['abook_their_perms'] & PERMS_A_DELEGATE)? 1 : 0));
|
||||
|
||||
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','view_stream',intval(($abook['abook_my_perms'] & PERMS_R_STREAM)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','view_profile',intval(($abook['abook_my_perms'] & PERMS_R_PROFILE)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','view_contacts',intval(($abook['abook_my_perms'] & PERMS_R_ABOOK)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','view_storage',intval(($abook['abook_my_perms'] & PERMS_R_STORAGE)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','view_pages',intval(($abook['abook_my_perms'] & PERMS_R_PAGES)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','send_stream',intval(($abook['abook_my_perms'] & PERMS_W_STREAM)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','post_wall',intval(($abook['abook_my_perms'] & PERMS_W_WALL)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','post_comments',intval(($abook['abook_my_perms'] & PERMS_W_COMMENT)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','post_mail',intval(($abook['abook_my_perms'] & PERMS_W_MAIL)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','post_like',intval(($abook['abook_my_perms'] & PERMS_W_LIKE)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','tag_deliver',intval(($abook['abook_my_perms'] & PERMS_W_TAGWALL)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','chat',intval(($abook['abook_my_perms'] & PERMS_W_CHAT)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','write_storage',intval(($abook['abook_my_perms'] & PERMS_W_STORAGE)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','write_pages',intval(($abook['abook_my_perms'] & PERMS_W_PAGES)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','republish',intval(($abook['abook_my_perms'] & PERMS_A_REPUBLISH)? 1 : 0));
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms','delegate',intval(($abook['abook_my_perms'] & PERMS_A_DELEGATE)? 1 : 0));
|
||||
|
||||
$x = perms_int_to_array($abook['abook_their_perms']);
|
||||
if($x) {
|
||||
foreach($x as $k => $v) {
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'their_perms',$k, $v);
|
||||
}
|
||||
}
|
||||
|
||||
$x = perms_int_to_array($abook['abook_my_perms']);
|
||||
if($x) {
|
||||
foreach($x as $k => $v) {
|
||||
set_abconfig($abook['abook_channel'],$abook['abook_xchan'],'my_perms',$k, $v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function translate_channel_perms_outbound(&$channel) {
|
||||
@ -217,3 +231,6 @@ function translate_abook_perms_inbound($channel,$abook) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -456,15 +456,28 @@ function zot_refresh($them, $channel = null, $force = false) {
|
||||
|
||||
// new connection
|
||||
|
||||
$my_perms = null;
|
||||
|
||||
$role = get_pconfig($channel['channel_id'],'system','permissions_role');
|
||||
if($role) {
|
||||
$xx = get_role_perms($role);
|
||||
if($xx['perms_auto'])
|
||||
if($xx['perms_auto']) {
|
||||
$default_perms = $xx['perms_connect'];
|
||||
$my_perms = \Zotlabs\Access\Permissions::FilledPerms($default_perms);
|
||||
}
|
||||
if(! $default_perms)
|
||||
$default_perms = get_pconfig($channel['channel_id'],'system','autoperms');
|
||||
|
||||
if(! $my_perms) {
|
||||
$x = \Zotlabs\Access\Permissions::FilledAutoperms($channel['channel_id']);
|
||||
if($x) {
|
||||
$my_perms = $x;
|
||||
}
|
||||
}
|
||||
|
||||
if($my_perms) {
|
||||
foreach($my_perms as $k => $v) {
|
||||
set_abconfig($channel['channel_id'],$x['hash'],'my_perms',$k,$v);
|
||||
}
|
||||
}
|
||||
|
||||
// Keep original perms to check if we need to notify them
|
||||
$previous_perms = get_all_perms($channel['channel_id'],$x['hash']);
|
||||
@ -497,7 +510,7 @@ function zot_refresh($them, $channel = null, $force = false) {
|
||||
);
|
||||
|
||||
if($new_connection) {
|
||||
if($new_perms != $previous_perms)
|
||||
if(! \Zotlabs\Access\Permissions::PermsCompare($new_perms,$previous_perms))
|
||||
Zotlabs\Daemon\Master::Summon(array('Notifier','permission_create',$new_connection[0]['abook_id']));
|
||||
Zotlabs\Lib\Enotify::submit(array(
|
||||
'type' => NOTIFY_INTRO,
|
||||
|
@ -2412,6 +2412,7 @@ function update_r1180() {
|
||||
if($r1) {
|
||||
foreach($r1 as $rr) {
|
||||
perm_limits_upgrade($rr);
|
||||
autoperms_upgrade($rr);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user