🌟 [EPIC] 1.X.0 - Org: Organisations/Projects/Groups
Created by: ulfgebhardt
🌟 EPIC - 1.X.0 - Organisation: Org/Projects/Groups
——— This concept is now planned new in EPIC #5059 (closed) ———
General Concept
An org is the very general concept for every entity which is not a person – an organisation, a business, a project, a charity, a foundation, a group of people ...
Implement a feature called org
means to create a new entity which is not a user account and therefore can not be logged in. But it has an org profile similar to a user profile, see below.
Public Orgs Or Groups
A user can create and own one or more orgs of which they are a member, and can also invite other members to join this org. Another name to describe this concept is public group
since it's a group but does not have an internal communication channel by internal posts. (Internal communication of public orgs or groups can be implemented with a chat feature based on the groups membership.)
Closed Orgs Or Groups
Later we have the idea and see the need of having closed orgs for special interests. Examples are offending contents like explicit sexuality, if users don’t want to show to every other person like neighbours that they are engaged parties or other activities, if you organise things like events in which not every user should interfere, users discuss issues which the most users or the network owner don’t like to have in the general newsfeed, etc.
This means in detail that users can post org internal posts which can not be seen by users which are no members. Though this just seems like a checkbox in the settings the consequences are huge:
Complexity:
- a closed org becomes kind of an internal network
- a member can post internal
- an admin can post internal and external
- users can follow closed orgs to add the posts to their newsfeed
Hosting:
- for the moderation internal post may be not seen by many users, therefore they may be not reported or at least not so quick if they have inappropriate content
Displaying And Functionality Of An Org
An org has a profile like a user profile and admins of that project can post as the org or in the name of the org which then will be publicly visible on the orgs profile and in the newsfeed, very similar to a user. So we can say that a profile
is a subset of a user
and an org
what should be relevant for the database structure and component design. See Database .
An important concept of the network is to make sure it's always clear who posts something. Therefore the org will be displayed as poster, but it has to be denoted which user posted it on behalf of the org. It should be visible in the avatar labels of posts and comments.
Furthermore an org can have additional infos on its profile page. Similar to the social media feature of the user profile one can imagine putting more info like an address, telephone or organisation type. This can be aligned with the user profile to reuse many of the possibilities of the orgs additional info for the user profile as well. Some things are not applicable tho – for example the organisation type since it does not make sense to give the user the option to display that.
Here different requirements meet each other and we have to find the right solution:
- users want a lot of freedom in their own profiles or their orgs profile description
- users want a nice and good looking profile description (may be use the rich possibilities of the tiptap editor?)
- network owners want to enforce or incentify users or projects to provide certain infos on their profile like an address, a telegram channel, a telephone number or an organisation type
New Pages
- org profile
- org settings
Changes in existing pages
- user profile shows the orgs a user is part of or owns
- post in the name of the org
- sidebar for users to see their orgs (?)
Actions as user
-
user can create an org -
user can see an orgs profile -
user can search for orgs -
user can follow orgs (?) -
user can become a member (different settings required: invite, request, free join) -
user can see additional infos (in which circumstances? @ulfgebhardt as member?) -
user can read project posts
Actions as owner or admin
-
owner/admin can delete org -
owner/admin can post as org -
owner/admin can change org settings -
owner/admin can set/change additional info -
owner/admin can invite/set roles of members
Actions as network admin
-
switch orgs on and off
Open questions and outlooks
-
rights management (what roles? how? when? whom?) -
Do we allow follow like on the user profile? -
Can only orgs follow orgs? (no: we need a concept how to connect orgs) -
Can users follow orgs? -
group chats of members (we have to recognise that posts are not the same as chat messages even when the comment function of a post is often used like a chat by the users)
User Stories
As a Creator
-
I want to create an org -
I want to view a Group -
I want to delete a Group -
I want to post as a Group -
I want to publish some general persistent Info about the Group -
I want to administer a Group -
I want to invite others to the Group -
I want to give other access to the Group -
I want to kick members from the group -
I want to administer the members of my Group -[ ] I want to transfer ownership of the Group
As a User
-
I want to view a Group -
I want to see other Posts of a Group -
I want to find out who's behind that Group/posting as that Group -
I want to join a Group
As a Moderator
-
I want to view all contents of a Group -
I want to block a Group as a whole -
I want to block single Posts of a Group -
I want to administer the Group(?) -
I want to administer the members of a Group(?) -
I want to change ownership of a Group -
I want to force a name change on a Group -
I want to remove some or all of the static content of a Group
Suggested initial Order of Implementation:
-
I want to create a Group -
I want to view a Group -
I want to delete a Group -
I want to publish some general persistent Info about the Group -
I want to post as a Group
Step By Step Implementation
Limited implementation by Keep It Simple Stupid (KISS) for a start (smart reminder to @roschaefer ), but have the Whole (As) Picture In Mind (WAPIM).
To limit the effort initially like required we can limit the feature set and enhance it step by step to get to the full feature:
1. Single Person Org
- [ ] The single person org’s issue is #4548 (closed) , PR #4701 .
Orgs have:
- only one admin as member per org
- as network admin switch orgs on and off
Orgs have not:
- no rights management
- no members
- no invite settings
- no follow
- no additional info
- no settings
2. Admins Can Delete The Org
The admins delete org issue is XXX .
Orgs have:
- admin deletes the org
3. Multi Admins Org
The multi admins org issue is XXX .
Orgs have:
- invite new admins to the org
- delete admin/member from the org
- admin/member leaves the org
4. Orgs With Invited Members
The orgs with invited members issue is XXX .
Orgs have:
- admins invite new member to the org
- delete member from the org
- member leaves the org
X. Later
- org type like: project, group, association, community, etc (added to single person org PRs #4803 into #4701 )
- display the admin(s) of the org (?) (added to single person org PRs #4803 into #4701 )
- sidebar for users to see their orgs
Database And Technical Concepts That Are Difficult To Change
Database
Database and program wise we should name this concept org
.
- The new entity has the node label
Org
. - We should think about to label the
User
and theOrg
nodes withProfile
as well, because they share a lot properties.- Answer: Avoid double labelling of hierarchic datasets !!! and read https://medium.com/neo4j/graph-modeling-labels-71775ff7d121
- because the search of a label in Neo4j is much quicker than the search of a type property
- not true because indexes of overlapping label and property combinations are not supported in Neo4j, see https://medium.com/neo4j/graph-modeling-labels-71775ff7d121
- If we search for a slug to mention or we may show who is online in the future or just a list of all profiles then we can just
MATCH
theProfile
label. We don’t have to unite matches what is often somewhat difficult and less performant.-
instead we can match
MATCH (profile) WHERE profile:User OR profile:Org
-
instead we can match
- The additional label of the profile node should be delivered via GraphQL by a new profile type with a property.
-
here we can do a GraphQL query
Profile
that delivers all common properties of :User and :Org with a label property and may be with the alternating properties as well.
-
here we can do a GraphQL query
URL
- URL wise we should name this concept
profile
like the users profile and distinguish by the type of the entity between users and orgs.
Additional Information
A PR for organisations exists as #3735 and can be used as template.
Questions Coming Up
-
do we want to edit the profile about
and other things perspectively in place as the owner? Now we do it in the settings …- similar to the profile avatar