OrchardCMS / OrchardCore

Orchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.
https://orchardcore.net
BSD 3-Clause "New" or "Revised" License
7.23k stars 2.34k forks source link

Collaboration Feature #13002

Open JoshTango opened 1 year ago

JoshTango commented 1 year ago

This is an enhancement request. I feel Orchard needs the ability to enable collaboration on content creation. I’ve seen various people request security permissions on the content level. The basic idea is the owner of the content item can decide who is allowed to access the content and who is allowed to edit or read etc. There is also an ability to invite someone to join the content item. I think doing this feature opens the door for Orchard developers to create collaboration apps. This would greatly enhance Orchards appeal I suspect. I have looked at some competitors CMS products and they have similar features. For example, Drupal has module called Content Access that provides this ability for Drupal developers. In Orchard this could be enabled in a module called Collaboration or Content Security or some other name. I suspect a content security part would be ideal which could be added to a content definition if so desired. I think this would open Orchard up to a whole new range of products designs and expand its reach. Collaboration is a huge feature, and it seems unfortunate Orchard doesn’t have this ability.

hishamco commented 1 year ago

I expect Lombiq already did something similar if I'm not wrong - may be for private usage - /cc @Piedone

hishamco commented 1 year ago

Seems duplicate for #5925

JoshTango commented 1 year ago

Yes and no. The issue here is why we want to do this feature. Collaboration apps have taken off big time but Orchard is closing the door to them for some reason. And I think I should put it back up front and center since the pandemic is creating a surge in collaboration apps. Orchard has everything we need to make a collaboration app except the collaboration ability lol. This is how a product manager would create a ticket for a high level concept needed driven by business need. then this would map to the low level implementation ticket which is how we would go bout doing it. which is permissions per content item.

Skrypt commented 1 year ago

I think @Piedone answered this one on the other issue by saying that the feature is implemented by @peterkeating here: https://github.com/EtchUK/Etch.OrchardCore.ContentPermissions

So, we need to see with him about merging it in OC, or maybe we should just be keeping it as is and simply discuss what is missing.

JoshTango commented 1 year ago

Wasn't that link for Orchard 1? does it work in Orchard Core?

JoshTango commented 1 year ago

I think @sebastienros made a comment that it should by roles which seems to be how it is on other site I have looked at.

So if a user has been given access to a specific piece of content that you assigning them a role like FULL, Moderator, Contributor etc.

JoshTango commented 1 year ago

When I look at miro.com they have Full or Member. Member can do anything and full can add or remove other users and have owner level rights.

However from Orchard perspective its more about where and how these roles are defined. Maybe these roles are defined on the content definition level, or maybe they are defined in the regular security area for site wide usage of all content definitions?

Skrypt commented 1 year ago

Wasn't that link for Orchard 1? does it work in Orchard Core?

It is working with Orchard Core 1.4.0 as it seems documented.

JoshTango commented 1 year ago

ok let me read through that better.

JoshTango commented 1 year ago

ok so it says this "which will display all the roles in the CMS" this implies site wide role definitions will eb available to a specific content item

JoshTango commented 1 year ago

Well I tried to activate the feature with 1.5 and got: InvalidOperationException: Unable to resolve service for type 'OrchardCore.ContentManagement.Metadata.IContentDefinitionManager' while attempting to activate 'Etch.OrchardCore.ContentPermissions.Migrations'.

It did say tested with 1.4 so maybe not ready yet for 1.5 @peterkeating

MikeAlhayek commented 1 year ago

@JoshTango Just some thoughts around this. You can use workflow as @sebastienros mentioned during the triage call today. Workflow will allow you to engage users when an event take place. Additionally, we now have notifications which is part of 1.6-preview that you can test. This allows you to send notifications using workflow of using code.

If you want to create a module for collaboration, I personally suggest that you use a new type not content types. Collaboration board will probably require a more specific UI that the content management UI provides. Creating a custom object for this would give you full control on how the board will look like and what function you want to provide.

However, if you want to use ContentItem, you could create content part that would allow the user to control access. this may be a similar setup to the ListPart and ContainedPart.

I am not sure Collaboration module is something we should include in OrchardCore.

JoshTango commented 1 year ago

Yes I had thought to create a new admin UI for this for sure. In fact I was considering a decoupled CMS solution. I was thinking a ListPart where they could all control what goes in it. I was still concerned about the permissions of the ListPart items.

JoshTango commented 1 year ago

Oh and by the way I wasn't looking to make a board. I was looking to make a channel like a YouTube channel. In a channel you can have multiple people control what is in the channel. Several employees could have permission to modify the channel contents. In this way the Admin UI as it is is perfect. So I think a cms with this scenario should have collaboration.

JoshTango commented 1 year ago

Another example would be Confluence with their Spaces. The current Admin UI would be perfect for spaces. Basically any collaboration that involves a linear list of content items. It doesn't have to be boards.

JoshTango commented 1 year ago

I thought I would try and clarify the minimum requirements and scope. The only UI change Orchard would have to make is to add a user’s button to the content item page or to the grid view leading to the content item page. The user’s button would take you to a page where you can add or remove users and set roles. If the content item had a List Part, then it would also control who was allowed to add or remove items from the List Part.

If someone wanted a different UI then what the List Part offers, then they could make a module with a board like feel to it if that’s what they wanted. If someone wanted a different content editor, then they could make a module for say a canvas editor if they were making a drawing app. All I want Orchard to do is handle the underlying content permissions issue for both the List Part and the content editor page and not make any UI changes other than adding the user’s button.

Skrypt commented 1 year ago

You can probably do all of this already using a Handler that will look for permissions defined in a custom Permission service. Else, yes, nothing is impossible, though this is a feature that will surely slow down the admin UI and needs to be done right.

JoshTango commented 1 year ago

Well I assume it would be in its own feature/module and only people who enabled this feature would take any extra performance hit and not people who didnt enable the feature.