owncloud / customgroups Goto Github PK
View Code? Open in Web Editor NEWLet users create their own custom groups
License: GNU Affero General Public License v3.0
Let users create their own custom groups
License: GNU Affero General Public License v3.0
Folder stops to be shared.
Folder is still shared. Sharees doesn't see it shared though.
After step 8, member2 can see the folder 'things' shared with him.
Operating system:
Ubuntu 16.04
Web server:
Apache
Database:
MySQL
PHP version:
7.0
ownCloud version: (see ownCloud admin page)
10.0.3beta1
{"installed":"true","maintenance":"false","needsDbUpgrade":"false","version":"10.0.3.0","versionstring":"10.0.3 beta","edition":"Community","productname":"ownCloud"}
Updated from an older ownCloud or fresh install:
Fresh
The content of config/config.php:
Are you using external storage, if yes which one: local/smb/sftp/...
No.
Are you using encryption:
No.
Logs
Browser
Chrome
cc @PVince81
Not sure why we made custom groups global (every user can share with all groups of an instance).
Somehow I find it odd in the meantime as you get to see groups to share with in the sharing dialog that you actually don't 'know' and where you can't see the member list. The only use case I could think of is that I am advised to share with such a group while not getting all the other shares the group has.
If there are other use cases where the current handling is better, please shout out!
Addition TBD: We could change the default to 'not global' (only members can share with the group) and add an option (checkbox) to make it global.
Sorting is currently wrong and also done on the client side.
Once we add pagination, client-side sorting will not be possible any more so it needs to be done on the backend side.
@pmaier1 FYI, I think these sort defaults make sense. I do not plan to make alternative sorts with clickable columns in this first version.
Sidebar opens again and you can access the right menu.
Clicking after closing sidebar is ignored.
Operating system:
Ubuntu 16.04
Web server:
Apache
Database:
MySQL
PHP version:
7.0
ownCloud version: (see ownCloud admin page)
10.0.3beta1
{"installed":"true","maintenance":"false","needsDbUpgrade":"false","version":"10.0.3.0","versionstring":"10.0.3 beta","edition":"Community","productname":"ownCloud"}
Updated from an older ownCloud or fresh install:
Fresh
The content of config/config.php:
Are you using external storage, if yes which one: local/smb/sftp/...
No.
Are you using encryption:
No.
Logs
Browser
Chrome
cc @PVince81
Steps:
What happens ?
If "user1" is the only member of the group, automatically delete the group as well.
If there are other members in the group (admin or non-admin), the group stays. If there is no admin in the group, the superadmin (aka ownCloud admin) has the ability to set a group admin for that one.
Release needed for https://github.com/owncloud/enterprise/issues/2092#issuecomment-321470519, amongst others.
Development, Open must have for release
QA
Marketing
Build
Users which are already members of the customgroup doesn't appear in the dropdown.
Ldap users which are already members of the customgroup still appear in the dropdown.
When choosing them, they cannot be added though, which is correct.
Operating system:
Ubuntu 16.04
Web server:
Apache
Database:
MySQL
PHP version:
7.0
ownCloud version: (see ownCloud admin page)
10.0.3beta1
{"installed":"true","maintenance":"false","needsDbUpgrade":"false","version":"10.0.3.0","versionstring":"10.0.3 beta","edition":"Community","productname":"ownCloud"}
Updated from an older ownCloud or fresh install:
Fresh
The content of config/config.php:
Are you using external storage, if yes which one: local/smb/sftp/...
No.
Are you using encryption:
No.
Logs
Browser
Chrome
cc @PVince81
@DeepDiver1975 I copied the travis.yml
stuff from the activity app and it came with clover code coverage.
However for this project it gives a 404 when uploading. I suspect that one needs to create a project on some website for publishing to work.
Can you take care of this and uncomment the matching line in .travis.yml
?
Thanks
With owncloud/core#14851
But met some issues so far: owncloud/core#14851 (comment)
Goal is mostly to test migrations.
Whenever a group admin adds a user to a group, send that user a notification using the notification API.
(note that as of today notifications do not send email but appear only in the web UI and clients that support notifications)
Spinner appears on delete but never disappears.
Also appears in the wrong place when switching member permission.
Need more specific spinners there.
Since the event dispatcher is global, we should namespace the events: \OCA\CustomGroups::leaveGroup
.
@sharidas please adjust everywhere accordingly. Sorry for not noticing this earlier.
the marketplace requires at least one screenshot - please provide them
see https://github.com/owncloud/contacts/blob/master/appinfo/info.xml#L18
Test at least whether custom groups can be used when sharing.
Goal is to be able to have the group manager events (hooks) triggered automatically:
The reason why we didn't do this in the first place back then was mostly because we didn't have the concept of "scope" before, so supporting the above operations would mean that the groups would become visible in the users page and provisioning API. Now that we have the scopes concept, this is not needed any more and we can now use the group manager instead.
To do so, the CustomGroupsDatabaseHandler must implement the above operations "officially" and advertise these through implementsAction
. Then the DAV code needs to use the group manager's methods instead of going directly to the database handler. See delete PR for an example.
It is there.
It doesn't appear.
Operating system:
Ubuntu 16.04
Web server:
Apache
Database:
MySQL
PHP version:
7.0
ownCloud version: (see ownCloud admin page)
{"installed":"true","maintenance":"false","needsDbUpgrade":"false","version":"10.0.1.3","versionstring":"10.0.1 RC4","edition":"Enterprise","productname":"ownCloud"}
Updated from an older ownCloud or fresh install:
Fresh
The content of config/config.php:
Are you using external storage, if yes which one: local/smb/sftp/...
Yes WND.
Tested using windows server 2008 R2 and windows 10.
Are you using encryption:
No
Logs
Browser
Chrome
Logs
Currently the UI shows "Member" for every groups displayed in the group list when logged in as OC admin.
Remember, the OC admin can manage any group regardless of membership.
The behavior must be changed to display "Group admin" for OC admins.
When deleting a user that is member of custom groups the user stays in the group listing even though the account has been deleted.
Make it possible to specify a key in an env variable and use that key with occ to sign the app.
We'll likely need such process to make it easier to release signed market apps.
but keep int in the database.
@SergioBertolinSG @DeepDiver1975 as discussed
modules.json contains the list of JS files to load, but it is parsed every time.
It might make sense to cache this list somewhere (memcache) ?
The reason we need such file is because the list is used both for PHP script loading and also by the JS unit tests. Also the file specifies the correct loading order.
@jvillafanez any suggestions on caching ?
Whenever a user creates a new group, automatically append (2) or another number if the group list visible for this user already contains a similar entry. This is mostly for information purposes.
The user can still choose to rename the group back to the name.
Should not append anything if the group exists but is not visible for the current user.
Estimate: 1-3 days as we might have to tear up the server side implementation
Customgroup is renamed.
It fails to rename the customgroup.
Operating system:
Ubuntu 16.04
Web server:
Apache
Database:
MySQL
PHP version:
7.0
ownCloud version: (see ownCloud admin page)
10.0.3beta1
{"installed":"true","maintenance":"false","needsDbUpgrade":"false","version":"10.0.3.0","versionstring":"10.0.3 beta","edition":"Community","productname":"ownCloud"}
Updated from an older ownCloud or fresh install:
Fresh
The content of config/config.php:
Are you using external storage, if yes which one: local/smb/sftp/...
No.
Are you using encryption:
No.
Logs
{"reqId":"cTxBi29Px0i4qvbOsG0n","level":4,"time":"2017-08-22T08:24:51+00:00","remoteAddr":"HIDDEN_IP","user":"admin","app":"webdav","method":"MKCOL","url":"\/remote.php\/dav\/customgroups\/groups\/soyprivado2","message":"Exception: {\"Message\":\"HTTP\\\/1.1 409 Group with display name \\\"soyprivado\\\" already exists\",\"Exception\":\"Sabre\\\\DAV\\\\Exception\\\\Conflict\",\"Code\":0,\"Trace\":\"#0 \\\/opt\\\/owncloud\\\/apps\\\/customgroups\\\/lib\\\/Dav\\\/GroupsCollection.php(124): OCA\\\\CustomGroups\\\\Dav\\\\GroupsCollection->createGroup('soyprivado2', 'soyprivado')\\n#1 \\\/opt\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(1196): OCA\\\\CustomGroups\\\\Dav\\\\GroupsCollection->createExtendedCollection('soyprivado2', Object(Sabre\\\\DAV\\\\MkCol))\\n#2 \\\/opt\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(590): Sabre\\\\DAV\\\\Server->createCollection('customgroups\\\/gr...', Object(Sabre\\\\DAV\\\\MkCol))\\n#3 [internal function]: Sabre\\\\DAV\\\\CorePlugin->httpMkcol(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#4 \\\/opt\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/EventEmitterTrait.php(105): call_user_func_array(Array, Array)\\n#5 \\\/opt\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(479): Sabre\\\\Event\\\\EventEmitter->emit('method:MKCOL', Array)\\n#6 \\\/opt\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(254): Sabre\\\\DAV\\\\Server->invokeMethod(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#7 \\\/opt\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Server.php(234): Sabre\\\\DAV\\\\Server->exec()\\n#8 \\\/opt\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#9 \\\/opt\\\/owncloud\\\/remote.php(165): require_once('\\\/opt\\\/owncloud\\\/a...')\\n#10 {main}\",\"File\":\"\\\/opt\\\/owncloud\\\/apps\\\/customgroups\\\/lib\\\/Dav\\\/GroupsCollection.php\",\"Line\":135,\"User\":\"admin\"}"}
Browser
Chrome
cc @PVince81
Expected: still works
Actual: broken with JS errors.
Maybe need some shims... I'm pretty sure this is not the only app that is likely to break.
JS tests usually run fine locally for me, but for some reason the Travis env is having trouble:
/home/travis/build/owncloud/core/apps/customgroups/node_modules/.bin/karma start tests/js/karma.config.js --single-run
/home/travis/build/owncloud/core/apps/customgroups/node_modules/socket.io/lib/store.js:35
Store.prototype.__proto__ = EventEmitter.prototype;
^
TypeError: Cannot read property 'prototype' of undefined
at Object.<anonymous> (/home/travis/build/owncloud/core/apps/customgroups/node_modules/socket.io/lib/store.js:35:41)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.require (module.js:498:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/home/travis/build/owncloud/core/apps/customgroups/node_modules/socket.io/lib/manager.js:16:13)
at Module._compile (module.js:571:32)
make: *** [test-js] Error 1
Use background job because it could be a lot of users.
On the other hand, we need to find out the former members after the group was deleted.
Adding the list of members as a parameter to the background job is not an option because that array is likely to become big.
So it almost looks like we'd need a "deleted" flag first to the group is technically deleted and invisible, but the members data is still there until full deletion.
Currently we use PROPFIND for many listing operations.
We need to also provide a REPORT method that supports pagination for these operarations.
Should be called 'Group owner' to not confuse people with the general group admins (sub-admins).
When autocompletion for sharing is off, would still be nice to propose the groups the user is member of
the autocomplete for sharing or the autocomplete in the members panel ?
permission change should be a dropdown instead of pencil
Make
in the customgroups folderMake runs fine
Make breaks as it can't find NAME/apps/customgroups/tools/composer.phar
as in the example below.
Composer (version 1.4.2) successfully installed to: /home/[...]/FOLDER NAME/apps/customgroups/tools/composer.phar
Use it: php composer.phar
chmod u+x NAME/apps/customgroups/tools/composer.phar
chmod: Zugriff auf 'NAME/apps/customgroups/tools/composer.phar' nicht möglich: Datei oder Verzeichnis nicht gefunden
OS: Ubuntu 16.04
In the screenshot below, in the Personal navigation list (1) the app name is spelled as "Customgroups". However, in the app title (2) (sorry, not sure of a better term) it's spelled "Custom Groups".
The navigation list title needs to be changed to be consistent with the naming in the rest of the application.
- Admin can change the role of the last group member to ‘member’ (admin is not in the group)
→ no ‘group admin’ left
The UI allows this but not the backend.
So the last admin would still stay in the group.
This bug is about making the UI show a proper message in this situation.
cc @pmaier1
Requires an API in core because we don't want to fetch every user's display name one by one...
Use the same API like sharing so we benefit from "restrict sharing to only your groups"
The notification should not contain """
This is how it looks:
Operating system:
Web server:
Database:
PHP version:
ownCloud version: (see ownCloud admin page)
10.0.1
As groupadmin, I can
As member, I can
ownCloud admins (who are in the "admin" group) can perform any operation that a group admin could.
implement group backend for user groups: #1
new DB tables to store these groups: #1
generate unique group ids to avoid collisions: #1
Webdav APIs for group management: #3
transfer ownership must work with those
send notification when added to group: #4
Use case:
For some larger event a group has to be generated to share event material with.
All users are already known and listed in a csv file.
In order to allow easier setup of such a larger groups an import based on this csv will help a lot.
All users are written down in the csv file will be added to an existing group
Test Case | Expected Result | Result | Related Comment |
---|---|---|---|
Enable the app. | No problems found. | ⚙️ | |
Disable and enable the app using CLI. | No problems found. | ⚙️ | |
Create a custom group. | Custom group is created correctly. | ⚙️ | |
Create an already existing custom group. | The group cannot be created again. | ⚙️ | |
Delete a custom group. | The group is removed correctly. | ⚙️ | |
Rename a custom group. | The group is renamed correctly. | ⚙️ | |
As a non-admin member try to rename its custom group. | He cannot rename its custom group | ⚙️ | |
Get members of a group. | Members are retrieved correctly. | ⚙️ | |
Check that the creator of a custom group becames admin automatically. | No problems found. | ⚙️ | |
As a creator of a custom group add members. | Members are added correctly. | ⚙️ | |
As non-admin member of a custom group try to add members. | Non-admin member cannot add members. | ⚙️ | |
As non-member of a custom group try to list its members. | Non-admin member cannot list members. | ⚙️ | |
As custom group member try to list members. | Custom group member can list members. | ⚙️ | |
As non-admin member of a custom group try to delete a custom group | A non-admin member of a custom group cannot delete a custom group. | ⚙️ | |
As a creator of a custom group try to remove members. | Creator of a custom group can remove members. | ⚙️ | |
As a non-admin member of a custom group try to remove members | A non-admin member of a custom group cannot remove members. | ⚙️ | |
Not having more admins on a custom group, as group owner try to remove yourself from the group | Group owner cannot remove self if no other admin exists in the group. | ⚙️ | |
As member of a custom group leave the custom group. | A member of a custom group can leave the custom group himself. | ⚙️ | |
As a user check the groups you belong to. | A user can list his groups. | ⚙️ | |
As owner of a group, try to change the role of a member of the group. | Role is changed successfully. | ⚙️ | |
Create a custom group and let user 'member1' as admin. | 'member1' is the new admin of the group. No problems. | ⚙️ | |
As superadmin of the server create a custom group. | Superadmin can create custom groups. | ⚙️ | |
As superadmin add a user to a custom group. | Superadmin can add a user to any custom group. | ⚙️ | |
As superadmin rename a custom group. | Superadmin can rename any custom group. | ⚙️ | |
As superadmin change role of a member of a group making him admin. | Superadmin can change roles. | ⚙️ | |
As superadmin remove a member of a custom group. | Superadmin can remove members. | ⚙️ | |
As superadmin try to list members of a custom group. | Superadmin can list members. | ⚙️ | |
As member converted to group owner add members to group, remove members, change roles and list members. | A member converted to group owner can do the same as group owner | ⚙️ | |
Having no other admin in a custom group, as group owner try to remove your own admin permissions. | A group owner cannot remove his own admin permissions if there is no other owner in the group | ⚙️ | |
Check that a non-existing user cannot be added to a custom group | ⚙️ | ||
Using frontend | |||
Create a custom group. | Custom group is created correctly. | ✅ | |
Create an already existing custom group. | The group cannot be created again. A warning appears. | ✅ | |
Delete a custom group. | The group is removed correctly. | ✅ | |
Rename a custom group. | The group is renamed correctly. | ✅ | fixed #87 |
As a creator of a custom group add members. | Members are added correctly. | ✅ | |
As regular user member of a custom group check the users in the custom groups. | You can see the other members. | ✅ | |
As non-admin member of a custom group try to add members. | Non-admin member cannot add members. There is no UI element to do it. | ✅ | |
As non-admin member of a custom group try to delete a custom group | A non-admin member of a custom group cannot delete a custom group. | ✅ | |
As a creator of a custom group try to remove members. | Creator of a custom group can remove members. | ✅ | |
As a non-admin member of a custom group try to remove members | Not even possible. | ✅ | |
Not having more admins on a custom group, as group owner try to remove yourself from the group | Group owner cannot remove self if no other admin exists in the group. | ✅ | |
As member of a custom group leave the custom group. | A member of a custom group can leave the custom group himself. | ✅ | |
As a user check the groups you belong to. | A user can list his groups. | ✅ | |
As owner of a group, try to change the role of a member of the group. | Role is changed successfully. | ✅ | Fixed as part of #33 |
Create a custom group and let user 'member1' as admin. | 'member1' is the new admin of the group. No problems. | ✅ | Fixed as part of #33 |
As member converted to group owner add members to group, remove members, change roles and list members. | A member converted to group owner can do the same as group owner | ✅ | |
Having no other admin in a custom group, as group owner try to remove your own admin permissions. | A group owner cannot remove his own admin permissions if there is no other owner in the group | ✅ | |
Browsers | |||
Check that all the UI elements are usable when browsing with safari | ✅ | ||
Check that all the UI elements are usable when browsing with chrome | ✅ | Besides changing role issues, ok | |
Check that all the UI elements are usable when browsing with firefox | ✅ | ||
Check that all the UI elements are usable when browsing with edge | ✅ | ||
Check that all the UI elements are usable when browsing with IE11 | ✅ | ||
Extra cases | |||
Set up an ldap server. Create a custom group and add ldap users as members. | They can use customgroups without problems. | ✅ | #90 |
Check that ldap users appear with their display name instead of the uuid. | ✅ |
Whenever a superadmin (aka ownCloud admin) is not a group member, they should still be able to add members to existing groups.
Currently it fails on the backend.
oc:display-name
: group display nameMembershipNode
, name is the custom group URIoc:role
(int) whether this member is also a group adminoc:role
propertyMembershipNode
where name is group idA declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.