Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kamm <mail@ckamm.de>2016-03-30 12:33:34 +0300
committerChristian Kamm <mail@ckamm.de>2016-04-14 10:44:37 +0300
commit910c61b4923b645dd3e2d144e37f935913e9f416 (patch)
treeb6b5aed9ba18a9955682bc29e1ccfa8fd4088228 /src/gui/shareusergroupwidget.cpp
parenta4f606ceab6b68837ff96a378055f948736ad189 (diff)
Disable unavailable sharing permissions #4383
Users can't reshare with more permissions than they have themselves.
Diffstat (limited to 'src/gui/shareusergroupwidget.cpp')
-rw-r--r--src/gui/shareusergroupwidget.cpp57
1 files changed, 36 insertions, 21 deletions
diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp
index 01a26f327..441606743 100644
--- a/src/gui/shareusergroupwidget.cpp
+++ b/src/gui/shareusergroupwidget.cpp
@@ -42,13 +42,17 @@
namespace OCC {
-ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account, const QString &sharePath, const QString &localPath, bool resharingAllowed, QWidget *parent) :
+ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account,
+ const QString &sharePath,
+ const QString &localPath,
+ SharePermissions maxSharingPermissions,
+ QWidget *parent) :
QWidget(parent),
_ui(new Ui::ShareUserGroupWidget),
_account(account),
_sharePath(sharePath),
_localPath(localPath),
- _resharingAllowed(resharingAllowed),
+ _maxSharingPermissions(maxSharingPermissions),
_disableCompleterActivated(false)
{
setAttribute(Qt::WA_DeleteOnClose);
@@ -178,7 +182,7 @@ void ShareUserGroupWidget::slotSharesFetched(const QList<QSharedPointer<Share>>
continue;
}
- ShareWidget *s = new ShareWidget(share, _isFile, _ui->scrollArea);
+ ShareWidget *s = new ShareWidget(share, _maxSharingPermissions, _isFile, _ui->scrollArea);
connect(s, SIGNAL(resizeRequested()), this, SLOT(slotAdjustScrollWidgetSize()));
layout->addWidget(s);
@@ -246,15 +250,15 @@ void ShareUserGroupWidget::slotCompleterActivated(const QModelIndex & index)
* https://github.com/owncloud/core/issues/22122#issuecomment-185637344
*/
if (sharee->type() == Sharee::Federated) {
- int permissions = Share::PermissionRead | Share::PermissionUpdate;
+ int permissions = SharePermissionRead | SharePermissionUpdate;
if (!_isFile) {
- permissions |= Share::PermissionCreate | Share::PermissionDelete;
+ permissions |= SharePermissionCreate | SharePermissionDelete;
}
_manager->createShare(_sharePath, Share::ShareType(sharee->type()),
- sharee->shareWith(), Share::Permission(permissions));
+ sharee->shareWith(), SharePermission(permissions));
} else {
_manager->createShare(_sharePath, Share::ShareType(sharee->type()),
- sharee->shareWith(), Share::PermissionDefault);
+ sharee->shareWith(), SharePermissionDefault);
}
_ui->shareeLineEdit->setEnabled(false);
@@ -276,6 +280,7 @@ void ShareUserGroupWidget::displayError(int code, const QString& message)
}
ShareWidget::ShareWidget(QSharedPointer<Share> share,
+ SharePermissions maxSharingPermissions,
bool isFile,
QWidget *parent) :
QWidget(parent),
@@ -291,10 +296,13 @@ ShareWidget::ShareWidget(QSharedPointer<Share> share,
QMenu *menu = new QMenu(this);
_permissionCreate = new QAction(tr("create"), this);
_permissionCreate->setCheckable(true);
+ _permissionCreate->setEnabled(maxSharingPermissions & SharePermissionCreate);
_permissionUpdate = new QAction(tr("change"), this);
_permissionUpdate->setCheckable(true);
+ _permissionUpdate->setEnabled(maxSharingPermissions & SharePermissionUpdate);
_permissionDelete = new QAction(tr("delete"), this);
_permissionDelete->setCheckable(true);
+ _permissionDelete->setEnabled(maxSharingPermissions & SharePermissionDelete);
menu->addAction(_permissionUpdate);
/*
@@ -313,6 +321,10 @@ ShareWidget::ShareWidget(QSharedPointer<Share> share,
// Set the permissions checkboxes
displayPermissions();
+ _ui->permissionShare->setEnabled(maxSharingPermissions & SharePermissionShare);
+ _ui->permissionsEdit->setEnabled(maxSharingPermissions
+ & (SharePermissionCreate | SharePermissionUpdate | SharePermissionDelete));
+
connect(_permissionUpdate, SIGNAL(triggered(bool)), SLOT(slotPermissionsChanged()));
connect(_permissionCreate, SIGNAL(triggered(bool)), SLOT(slotPermissionsChanged()));
connect(_permissionDelete, SIGNAL(triggered(bool)), SLOT(slotPermissionsChanged()));
@@ -354,21 +366,24 @@ void ShareWidget::slotEditPermissionsChanged()
{
setEnabled(false);
- Share::Permissions permissions = Share::PermissionRead;
+ Share::Permissions permissions = SharePermissionRead;
if (_ui->permissionShare->checkState() == Qt::Checked) {
- permissions |= Share::PermissionShare;
+ permissions |= SharePermissionShare;
}
if (_ui->permissionsEdit->checkState() == Qt::Checked) {
- permissions |= Share::PermissionUpdate;
+ if (_permissionUpdate->isEnabled())
+ permissions |= SharePermissionUpdate;
/*
* Files can't have create or delete permisisons
*/
if (!_isFile) {
- permissions |= Share::PermissionCreate;
- permissions |= Share::PermissionDelete;
+ if (_permissionCreate->isEnabled())
+ permissions |= SharePermissionCreate;
+ if (_permissionDelete->isEnabled())
+ permissions |= SharePermissionDelete;
}
}
@@ -379,22 +394,22 @@ void ShareWidget::slotPermissionsChanged()
{
setEnabled(false);
- Share::Permissions permissions = Share::PermissionRead;
+ Share::Permissions permissions = SharePermissionRead;
if (_permissionUpdate->isChecked()) {
- permissions |= Share::PermissionUpdate;
+ permissions |= SharePermissionUpdate;
}
if (_permissionCreate->isChecked()) {
- permissions |= Share::PermissionCreate;
+ permissions |= SharePermissionCreate;
}
if (_permissionDelete->isChecked()) {
- permissions |= Share::PermissionDelete;
+ permissions |= SharePermissionDelete;
}
if (_ui->permissionShare->checkState() == Qt::Checked) {
- permissions |= Share::PermissionShare;
+ permissions |= SharePermissionShare;
}
_share->setPermissions(permissions);
@@ -444,19 +459,19 @@ void ShareWidget::displayPermissions()
_ui->permissionShare->setCheckState(Qt::Unchecked);
_permissionUpdate->setChecked(false);
- if (_share->getPermissions() & Share::PermissionUpdate) {
+ if (_share->getPermissions() & SharePermissionUpdate) {
_permissionUpdate->setChecked(true);
_ui->permissionsEdit->setCheckState(Qt::Checked);
}
- if (!_isFile && _share->getPermissions() & Share::PermissionCreate) {
+ if (!_isFile && _share->getPermissions() & SharePermissionCreate) {
_permissionCreate->setChecked(true);
_ui->permissionsEdit->setCheckState(Qt::Checked);
}
- if (!_isFile && _share->getPermissions() & Share::PermissionDelete) {
+ if (!_isFile && _share->getPermissions() & SharePermissionDelete) {
_permissionDelete->setChecked(true);
_ui->permissionsEdit->setCheckState(Qt::Checked);
}
- if (_share->getPermissions() & Share::PermissionShare) {
+ if (_share->getPermissions() & SharePermissionShare) {
_ui->permissionShare->setCheckState(Qt::Checked);
}
}