How do we model "groups" in the Annotation model? #119
|
From the description, the requirement for groups is that only members of the group be able to see the annotation (and hence it's an access control issue). #8 is explicitly not about access control, as raised by Irina and subsequently discussed and clarified at TPAC, which is recorded in the issue. Access control requires Authentication and Authorization, which we have resolved previously as out of scope, and on 2015-12-02 call decided to action chairs + staff contacts to find appropriate external advisors, per #19. You could have access control that allows only people in a group to see the annotations, but the audience be a different set. For example, an organization for the ACLs, and an audience of managers -- only people in the organization can see it, and although non-managers can see it, they're not the intended audience and hence may wish to filter it out. There seemed to be agreement on that call that the model should not include access control lists, that access control was at best a protocol issue, which is reinforced by the description -- you publish/create an annotation, and then only certain users (in the group) can see/retrieve it. So I propose that we do not accept the issue as stated:
|
|
Hi Rob, I'm having some trouble following the logic of how it is orthogonal to #8 . Access control requires Authentication and Authorization both of which require an "of what/who" question to be answered. The answer of the question easily overlaps with Audience. Specifically, you propose that the group with access to an annotation will be different than the audience for that annotation. This may be true but only in cases where the set of entities with access contains the set of entities that are the audience. Otherwise it becomes a bit silly as the annotations will never be viewed by the intended audience. Other than that nitpick I'm +1 for not accepting this issue:
Regards, Jacob P.S. I know we agreed to recommend schema:audience but should we provide a mapping between it and dc:audience for the community using the latter (i.e., does #8 need some additional text a la #18 's solution)? |
|
I agree it's not completely disjoint. I think it is orthogonal, in that:
Can you add the dc:audience equivalency to #8 please? |
I see overlap between "audience" and "group", in a very functional way; I think they should be handled the same, since the overlapping cases are obvious and we should prefer general capabilities over specific ones, where possible. But even if that notion is rejected, there should still be a way to express a target "group" in an annotation and a collection of annotations (and maybe in the protocol). |
|
To be honest, I am a little bit lost in this discussion. We agreed to use the schema.org/Audience class. It has a bunch of subclasses defined by schema.org, these can (and I presume will) evolve in future but, luckily, we do not manage those changes. But already at this point, the Audience class[1] is pretty open to be used for many different things; and instance can use the We also agreed that authorization and access control is out of scope in the model, and mostly out of scope for the Working Group altogether. Bottom line: I do not know what we are missing and what we are really discussing. My feeling is that there is simply no issue to solve here. |
|
@iherman When we add a feature, we need to know what the requirements are, so we can make sure it has the right characteristics. My expectation is that this will be pretty simple, and I'd like Hypothes.is and others who have implemented a "groups" feature to let us know what is needed. While I agree that we shouldn't define the details of authorization and access control, if we want interoperability, we may wish to add a normative requirement that a UA SHOULD honor a stated restriction, whether that is group or some other well-defined "audience" (I can imagine that students might not have access to instructor annotations on a textbook, for example). |
|
To be clear, I'm not suggesting we define those access-restricted categories, just that we enable communities to do so. |
I think this falls under the resolution we decided for issue #19 |
|
A Group may be the agent that creates an annotation. As has been discussed Groups can have a role in authorization and access control (which in my mind is quite distinct from audience role). And of course a Group may be the target audience of an annotation. Clearly Groups are complex and in the annotation ecosystem will play more roles than just that of audience. Since we are primarily concerned with annotations, not groups, I think it best to avoid as much as possible the temptation of offering our own new ontology for describing Groups in common roles (audience, author, access control). Such semantics (mostly at least) exist. When modeling annotations it seems better to point to existing semantics adequate for describing a Group in the context of a particular annotation. The schema.org audience property and Audience class is generally adequate as is to describe a Group as the audience of an annotation, allowing annotation authors to point to a further description of a Group when needed, and as necessary allows communities to offer their own extended models of audience-related attributes of a Group. Using schema.org annotation agents can name the Group that is the target of an annotation (schema:audienceType), and for certain existing sub-types of Audience (e.g., PeopleAudience), annotation agents can provide additional audience-relevant attributes of the Group, e.g., gender, min. age, max age. And of course through schema:url, schema:sameAs, additional rdfa typeOf, annotation creators can link to further information about a Group relevant to its other (non-audience) roles in the annotation ecosystem. So I would agree that this issue is orthogonal to #8. |
|
I cede to @nickstenning here who the technical insight from our perspective. |
|
And to be clear my comment earlier in this thread about the sufficiency of schema:audience and schema:Audience and about the orthogonality of this issue to #8 was in regard specifically to how we talk in an annotation about groups having the role of target audience for an annotation. While semantics also do exist for talking about groups in roles other than audience, there could be a need to come up with additional keys and objects to support a level of functionality and interoperability we deem essential for annotations having groups fulfilling other roles. Just as long as we are careful not to reinvent the wheel in the process and as long as we don't get monolithic about how groups mentioned in annotations are described. |
|
@shepazu your quote from earlier contains access control language (emphasis added):
If we were to add such a normative requirement, it should not be at the UA level, but at the protocol level--which I think has been said a few times now... Consequently, if we reword this issue and document requirements for groups as a thing in relation to the protocol doc, then I think we can get back on track. |
|
@BigBlueHat Why should groups (or even access control) only be done via the protocol? What about annotations that are stored locally, or exchanged offline, or otherwise not accessed via the protocol (which not every UA may use)? How is a client supposed to know how to treat those, if there's no property contained in the annotation itself?
It's true that several people have that opinion. I am not yet convinced that a related property shouldn't be in the model, as well, and I've stated the technical reasons why. Saying "some people agree with me" doesn't tell us tell us the technical rationale. |
|
@tcole said:
This seems to reinforce what I claimed:
And I keep to my opinion: that is covered, and we should not introduce a new concept for a "group" in our terminology and into our model. My proposal is to close down that aspect of the issue. (As @tcole said, there may be a more complex concept of a group, but I would object to get into a complex set of description to characterize those entities; I am not even sure what would really be what we described. Leave that for either future releases or for other groups (sic!) out there.) On the "authorization" aspect, @shepazu also said:
and also added:
The way I read these lines is to add something saying:
(or something similar after suitable wordsmithing.) I am fine with such a statement being added which probably reflects what we all think (and covers the example @shepazu gave). This can be added to the text about audiences (as a note, for example, not to disrupt that flow of the text). This may allow to close this issue and move on. |
|
This is a tricky topic, so let's not be surprised that there's miscommunication going on. As has already pointed out elsewhere, "groups" is a heavily overloaded word, so let's try and be clear about what we want to achieve.
As written, this is absolutely an access control requirement. You want the ability to give certain collections of people/machines/whatever the ability to perform certain actions on certain resources. To my mind this doesn't place any requirements on the model, but it does (as @BigBlueHat) and others have suggested, have implications for the protocol. @BigBlueHat and @azaroth42: are you imagining that "containers" will be one important unit of access control granularity? That is, a container could represent a group's annotations, and I will be able to see and/or modify specific containers dependent on membership of that group?
If I have the serialised content of an annotation, no matter how I received it, then by definition I have the ability to view the abstract entity represented by that data. Trying to enforce anything else through model properties doesn't make any sense. They're just bits on a computer I control... If I have the serialised content of an annotation, but no idea where it lives in an annotation store, then I'm not sure what it even means to ask "do I have permission to edit this annotation"? Again, it's just some bits on a computer I control. I can edit them, but that's not "editing" in any meaningful sense. Without an annotation service (even a private one for my own use) I can't republish those edits. So, overall, I think yes, this is an access control issue. But, there is one important aspect in which I think this does touch on the model, and I suspect that @shepazu may be thinking in these terms. A potential user interface for annotating:
It's not immediately clear to me that any of these considerations place hard requirements on the model, as all of them could in principle be achieved by other means (the client maintains state about where each annotation came from, and identity/permissions information also could come from elsewhere). But I think there is one very important scenario that we're not yet really considering: federation. If a client retrieves an annotation from its "canonical" data store (whatever that means) then I can maintain state about where it came from and who's allowed to do what with it. But what if a client retrieves an annotation from a data store which is republishing that annotation? What if a client retrieves annotations through an "aggregator" API that exposes annotations from multiple underlying containers through one set of endpoints? AIUI there is at the moment no support in the model for specifying the provenance of such annotations, or for including any kind of reference to where changes to such annotations need to be submitted (because I would guess the answer would probably not be "back to the aggregator"). In summary, then:
|
|
Good thoughts, @nickstenning. I'll reply to most of them here, but for this specific issue, I think we should:
Once we have some action items out of further discussions, we can certainly create those here as issues and come to consensus and act on them. So, to that end, let's move the conversation to the list (please): |
|
@nickstenning oh. Forgot this bit. In response to:
Check out these issues: They all in some way touch on provenance, federation, and distributed annotation. |
|
(For completeness of the discussion, see also the mail of Lutz Suhrbier on the mailing list) |
For me it is a pitty that this is not implemented in the first version, as groups are the first thing one needs, when the amount of annotations is growing (think a bit of how offen @ and # are used in social media) |
Sometimes you want to have an annotation published only to a particular group, and you may wish to let only those people see it. For example, a reading group, a classroom, an organization, or a group of friends.
The
audiencein #8 is intertwined with the notion of access control. What are the requirements for a "group"?