nkev commented on issue #1524:
URL: https://github.com/apache/couchdb/issues/1524#issuecomment-3143646264

   I'm sure this would already have been considered but I'll throw it out there 
anyway... :) 
   
   I wonder whether enforcing a `classic filter` (i.e. `function(doc, req)`) is 
an easy way to control user access to documents. Consider the following change 
to the `/{db}/_security` document:
   
   ```JSON
   {
       "admins": {
           "names": [
               "superuser"
           ],
           "roles": [
               "admins"
           ]
       },
       "members": {
           "names": [
               "user1",
               "user2"
           ],
           "roles": [
               "consumer",
               "reseller"
           ],
          "accessFilter" : "membersFilter"
       }
   }
   ```
   
   The new `accessFilter` property within the `members` object would force all 
`member` reads, writes and change-feed requests (e.g. via PouchDB) to go 
through the `membersFilter` function, like below. This would allow developers 
to write whatever rules they like in the filter function to control document 
access for all members, for example, by roles:
   
   ```Javascript
   function(doc, req){
   
           // a member user with 'consumer' role can READ documents with 
doc.type == 'product'
           if(req.method == 'GET' && doc.type == 'product' && 
req.userCtx.roles.indexOf('consumer') > -1) {
               return true; 
           }
   
           // a member user without 'reseller' role cannot access reseller 
admin page
           if(req.raw_path.startsWith("/reseller/" && 
req.userCtx.roles.indexOf('reseller') == -1) {
               return false; 
           }
   
          // other app specific custom conditions here...
   }
   ```
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to