{"action":"created","comment":{"url":"https://api.github.com/repos/odoo/odoo/pulls/comments/220108280","pull_request_review_id":158436885,"id":220108280,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMDEwODI4MA==","diff_hunk":"@@ -3029,26 +3000,56 @@ def check_access_rule(self, operation):\n         if self._uid == SUPERUSER_ID:\n             return\n \n+        invalid = self - self._filter_access_rule(operation)\n+        if not invalid:\n+            return\n+\n+        forbidden = invalid.exists()\n+        if forbidden:\n+            # the invalid records are (partially) hidden by access rules\n+            if self.is_transient():\n+                raise AccessError(_('For this kind of document, you may only access records you created yourself.\\n\\n(Document type: %s)') % (self._description,))\n+            else:\n+                _logger.info('Access Denied by record rules for operation: %s on record ids: %r, uid: %s, model: %s', operation, forbidden.ids, self._uid, self._name)\n+                raise AccessError(_('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\\n\\n(Document type: %s, Operation: %s)') % \\\n+                                  (self._description, operation))\n+\n+        # If we get here, the invalid records are not in the database.\n+        if operation in ('read', 'unlink'):\n+            # No need to warn about deleting an already deleted record.\n+            # And no error when reading a record that was deleted, to prevent spurious\n+            # errors for non-transactional search/read sequences coming from clients.\n+            return\n+        _logger.info('Failed operation on deleted record(s): %s, uid: %s, model: %s', operation, self._uid, self._name)\n+        raise MissingError(_('Missing document(s)') + ':' + _('One of the documents you are trying to access has been deleted, please try again after refreshing.'))\n+\n+    def _filter_access_rule(self, operation):","path":"odoo/models.py","position":null,"original_position":63,"commit_id":"e07853953029b2f564097ba4023af2e7e8a9bf98","original_commit_id":"d95be5723bef08737ba2bbb2ef52c8bfd83655da","user":{"login":"rco-odoo","id":7578141,"node_id":"MDQ6VXNlcjc1NzgxNDE=","avatar_url":"https://avatars2.githubusercontent.com/u/7578141?v=4","gravatar_id":"","url":"https://api.github.com/users/rco-odoo","html_url":"https://github.com/rco-odoo","followers_url":"https://api.github.com/users/rco-odoo/followers","following_url":"https://api.github.com/users/rco-odoo/following{/other_user}","gists_url":"https://api.github.com/users/rco-odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/rco-odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rco-odoo/subscriptions","organizations_url":"https://api.github.com/users/rco-odoo/orgs","repos_url":"https://api.github.com/users/rco-odoo/repos","events_url":"https://api.github.com/users/rco-odoo/events{/privacy}","received_events_url":"https://api.github.com/users/rco-odoo/received_events","type":"User","site_admin":false},"body":"Good idea, done.","created_at":"2018-09-25T08:51:22Z","updated_at":"2018-09-25T08:51:22Z","html_url":"https://github.com/odoo/odoo/pull/27157#discussion_r220108280","pull_request_url":"https://api.github.com/repos/odoo/odoo/pulls/27157","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/odoo/odoo/pulls/comments/220108280"},"html":{"href":"https://github.com/odoo/odoo/pull/27157#discussion_r220108280"},"pull_request":{"href":"https://api.github.com/repos/odoo/odoo/pulls/27157"}},"in_reply_to_id":220093745},"pull_request":{"url":"https://api.github.com/repos/odoo/odoo/pulls/27157","id":217279817,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE3Mjc5ODE3","html_url":"https://github.com/odoo/odoo/pull/27157","diff_url":"https://github.com/odoo/odoo/pull/27157.diff","patch_url":"https://github.com/odoo/odoo/pull/27157.patch","issue_url":"https://api.github.com/repos/odoo/odoo/issues/27157","number":27157,"state":"open","locked":false,"title":"[FIX] models: add filter method on access rules","user":{"login":"rco-odoo","id":7578141,"node_id":"MDQ6VXNlcjc1NzgxNDE=","avatar_url":"https://avatars2.githubusercontent.com/u/7578141?v=4","gravatar_id":"","url":"https://api.github.com/users/rco-odoo","html_url":"https://github.com/rco-odoo","followers_url":"https://api.github.com/users/rco-odoo/followers","following_url":"https://api.github.com/users/rco-odoo/following{/other_user}","gists_url":"https://api.github.com/users/rco-odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/rco-odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rco-odoo/subscriptions","organizations_url":"https://api.github.com/users/rco-odoo/orgs","repos_url":"https://api.github.com/users/rco-odoo/repos","events_url":"https://api.github.com/users/rco-odoo/events{/privacy}","received_events_url":"https://api.github.com/users/rco-odoo/received_events","type":"User","site_admin":false},"body":"Currently check_access_rule method checks for record rules and raises an error\r\nif there are either missing ids (deleted records) or forbidden ids (records\r\nhidden due to a record rule).\r\n\r\nPurpose of this commit is to have a method allowing to filter a given recordset\r\nand receive only valid records. Its implementation is basically a refactoring\r\nof check_access_rule.\r\n\r\nThis commit is linked to task ID 1856417 and PR #26565.\r\n","created_at":"2018-09-21T13:13:14Z","updated_at":"2018-09-25T08:51:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"98ef6a956d5e71832799267a4838cba559f37088","assignee":null,"assignees":[],"requested_reviewers":[{"login":"tde-banana-odoo","id":7501424,"node_id":"MDQ6VXNlcjc1MDE0MjQ=","avatar_url":"https://avatars2.githubusercontent.com/u/7501424?v=4","gravatar_id":"","url":"https://api.github.com/users/tde-banana-odoo","html_url":"https://github.com/tde-banana-odoo","followers_url":"https://api.github.com/users/tde-banana-odoo/followers","following_url":"https://api.github.com/users/tde-banana-odoo/following{/other_user}","gists_url":"https://api.github.com/users/tde-banana-odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/tde-banana-odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tde-banana-odoo/subscriptions","organizations_url":"https://api.github.com/users/tde-banana-odoo/orgs","repos_url":"https://api.github.com/users/tde-banana-odoo/repos","events_url":"https://api.github.com/users/tde-banana-odoo/events{/privacy}","received_events_url":"https://api.github.com/users/tde-banana-odoo/received_events","type":"User","site_admin":false},{"login":"xmo-odoo","id":7571158,"node_id":"MDQ6VXNlcjc1NzExNTg=","avatar_url":"https://avatars1.githubusercontent.com/u/7571158?v=4","gravatar_id":"","url":"https://api.github.com/users/xmo-odoo","html_url":"https://github.com/xmo-odoo","followers_url":"https://api.github.com/users/xmo-odoo/followers","following_url":"https://api.github.com/users/xmo-odoo/following{/other_user}","gists_url":"https://api.github.com/users/xmo-odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/xmo-odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xmo-odoo/subscriptions","organizations_url":"https://api.github.com/users/xmo-odoo/orgs","repos_url":"https://api.github.com/users/xmo-odoo/repos","events_url":"https://api.github.com/users/xmo-odoo/events{/privacy}","received_events_url":"https://api.github.com/users/xmo-odoo/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":106173385,"node_id":"MDU6TGFiZWwxMDYxNzMzODU=","url":"https://api.github.com/repos/odoo/odoo/labels/RD","name":"RD","color":"5319e7","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/odoo/odoo/pulls/27157/commits","review_comments_url":"https://api.github.com/repos/odoo/odoo/pulls/27157/comments","review_comment_url":"https://api.github.com/repos/odoo/odoo/pulls/comments{/number}","comments_url":"https://api.github.com/repos/odoo/odoo/issues/27157/comments","statuses_url":"https://api.github.com/repos/odoo/odoo/statuses/e07853953029b2f564097ba4023af2e7e8a9bf98","head":{"label":"odoo-dev:saas-11.5-filter-access-rule-rco","ref":"saas-11.5-filter-access-rule-rco","sha":"e07853953029b2f564097ba4023af2e7e8a9bf98","user":{"login":"odoo-dev","id":7466976,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0NjY5NzY=","avatar_url":"https://avatars0.githubusercontent.com/u/7466976?v=4","gravatar_id":"","url":"https://api.github.com/users/odoo-dev","html_url":"https://github.com/odoo-dev","followers_url":"https://api.github.com/users/odoo-dev/followers","following_url":"https://api.github.com/users/odoo-dev/following{/other_user}","gists_url":"https://api.github.com/users/odoo-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/odoo-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoo-dev/subscriptions","organizations_url":"https://api.github.com/users/odoo-dev/orgs","repos_url":"https://api.github.com/users/odoo-dev/repos","events_url":"https://api.github.com/users/odoo-dev/events{/privacy}","received_events_url":"https://api.github.com/users/odoo-dev/received_events","type":"Organization","site_admin":false},"repo":{"id":19853934,"node_id":"MDEwOlJlcG9zaXRvcnkxOTg1MzkzNA==","name":"odoo","full_name":"odoo-dev/odoo","private":false,"owner":{"login":"odoo-dev","id":7466976,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0NjY5NzY=","avatar_url":"https://avatars0.githubusercontent.com/u/7466976?v=4","gravatar_id":"","url":"https://api.github.com/users/odoo-dev","html_url":"https://github.com/odoo-dev","followers_url":"https://api.github.com/users/odoo-dev/followers","following_url":"https://api.github.com/users/odoo-dev/following{/other_user}","gists_url":"https://api.github.com/users/odoo-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/odoo-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoo-dev/subscriptions","organizations_url":"https://api.github.com/users/odoo-dev/orgs","repos_url":"https://api.github.com/users/odoo-dev/repos","events_url":"https://api.github.com/users/odoo-dev/events{/privacy}","received_events_url":"https://api.github.com/users/odoo-dev/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/odoo-dev/odoo","description":"RD Dev Repository","fork":true,"url":"https://api.github.com/repos/odoo-dev/odoo","forks_url":"https://api.github.com/repos/odoo-dev/odoo/forks","keys_url":"https://api.github.com/repos/odoo-dev/odoo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/odoo-dev/odoo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/odoo-dev/odoo/teams","hooks_url":"https://api.github.com/repos/odoo-dev/odoo/hooks","issue_events_url":"https://api.github.com/repos/odoo-dev/odoo/issues/events{/number}","events_url":"https://api.github.com/repos/odoo-dev/odoo/events","assignees_url":"https://api.github.com/repos/odoo-dev/odoo/assignees{/user}","branches_url":"https://api.github.com/repos/odoo-dev/odoo/branches{/branch}","tags_url":"https://api.github.com/repos/odoo-dev/odoo/tags","blobs_url":"https://api.github.com/repos/odoo-dev/odoo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/odoo-dev/odoo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/odoo-dev/odoo/git/refs{/sha}","trees_url":"https://api.github.com/repos/odoo-dev/odoo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/odoo-dev/odoo/statuses/{sha}","languages_url":"https://api.github.com/repos/odoo-dev/odoo/languages","stargazers_url":"https://api.github.com/repos/odoo-dev/odoo/stargazers","contributors_url":"https://api.github.com/repos/odoo-dev/odoo/contributors","subscribers_url":"https://api.github.com/repos/odoo-dev/odoo/subscribers","subscription_url":"https://api.github.com/repos/odoo-dev/odoo/subscription","commits_url":"https://api.github.com/repos/odoo-dev/odoo/commits{/sha}","git_commits_url":"https://api.github.com/repos/odoo-dev/odoo/git/commits{/sha}","comments_url":"https://api.github.com/repos/odoo-dev/odoo/comments{/number}","issue_comment_url":"https://api.github.com/repos/odoo-dev/odoo/issues/comments{/number}","contents_url":"https://api.github.com/repos/odoo-dev/odoo/contents/{+path}","compare_url":"https://api.github.com/repos/odoo-dev/odoo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/odoo-dev/odoo/merges","archive_url":"https://api.github.com/repos/odoo-dev/odoo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/odoo-dev/odoo/downloads","issues_url":"https://api.github.com/repos/odoo-dev/odoo/issues{/number}","pulls_url":"https://api.github.com/repos/odoo-dev/odoo/pulls{/number}","milestones_url":"https://api.github.com/repos/odoo-dev/odoo/milestones{/number}","notifications_url":"https://api.github.com/repos/odoo-dev/odoo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/odoo-dev/odoo/labels{/name}","releases_url":"https://api.github.com/repos/odoo-dev/odoo/releases{/id}","deployments_url":"https://api.github.com/repos/odoo-dev/odoo/deployments","created_at":"2014-05-16T11:16:19Z","updated_at":"2018-09-03T15:19:54Z","pushed_at":"2018-09-25T08:51:03Z","git_url":"git://github.com/odoo-dev/odoo.git","ssh_url":"git@github.com:odoo-dev/odoo.git","clone_url":"https://github.com/odoo-dev/odoo.git","svn_url":"https://github.com/odoo-dev/odoo","homepage":"https://www.odoo.com","size":2221845,"stargazers_count":80,"watchers_count":80,"language":null,"has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":40,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":40,"open_issues":0,"watchers":80,"default_branch":"master"}},"base":{"label":"odoo:saas-11.5","ref":"saas-11.5","sha":"13fc1380baa8ea3450fc1d9b6ddb25f94048b8ab","user":{"login":"odoo","id":6368483,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYzNjg0ODM=","avatar_url":"https://avatars2.githubusercontent.com/u/6368483?v=4","gravatar_id":"","url":"https://api.github.com/users/odoo","html_url":"https://github.com/odoo","followers_url":"https://api.github.com/users/odoo/followers","following_url":"https://api.github.com/users/odoo/following{/other_user}","gists_url":"https://api.github.com/users/odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoo/subscriptions","organizations_url":"https://api.github.com/users/odoo/orgs","repos_url":"https://api.github.com/users/odoo/repos","events_url":"https://api.github.com/users/odoo/events{/privacy}","received_events_url":"https://api.github.com/users/odoo/received_events","type":"Organization","site_admin":false},"repo":{"id":19745004,"node_id":"MDEwOlJlcG9zaXRvcnkxOTc0NTAwNA==","name":"odoo","full_name":"odoo/odoo","private":false,"owner":{"login":"odoo","id":6368483,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYzNjg0ODM=","avatar_url":"https://avatars2.githubusercontent.com/u/6368483?v=4","gravatar_id":"","url":"https://api.github.com/users/odoo","html_url":"https://github.com/odoo","followers_url":"https://api.github.com/users/odoo/followers","following_url":"https://api.github.com/users/odoo/following{/other_user}","gists_url":"https://api.github.com/users/odoo/gists{/gist_id}","starred_url":"https://api.github.com/users/odoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/odoo/subscriptions","organizations_url":"https://api.github.com/users/odoo/orgs","repos_url":"https://api.github.com/users/odoo/repos","events_url":"https://api.github.com/users/odoo/events{/privacy}","received_events_url":"https://api.github.com/users/odoo/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/odoo/odoo","description":"Odoo. Open Source Apps To Grow Your Business.","fork":false,"url":"https://api.github.com/repos/odoo/odoo","forks_url":"https://api.github.com/repos/odoo/odoo/forks","keys_url":"https://api.github.com/repos/odoo/odoo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/odoo/odoo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/odoo/odoo/teams","hooks_url":"https://api.github.com/repos/odoo/odoo/hooks","issue_events_url":"https://api.github.com/repos/odoo/odoo/issues/events{/number}","events_url":"https://api.github.com/repos/odoo/odoo/events","assignees_url":"https://api.github.com/repos/odoo/odoo/assignees{/user}","branches_url":"https://api.github.com/repos/odoo/odoo/branches{/branch}","tags_url":"https://api.github.com/repos/odoo/odoo/tags","blobs_url":"https://api.github.com/repos/odoo/odoo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/odoo/odoo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/odoo/odoo/git/refs{/sha}","trees_url":"https://api.github.com/repos/odoo/odoo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/odoo/odoo/statuses/{sha}","languages_url":"https://api.github.com/repos/odoo/odoo/languages","stargazers_url":"https://api.github.com/repos/odoo/odoo/stargazers","contributors_url":"https://api.github.com/repos/odoo/odoo/contributors","subscribers_url":"https://api.github.com/repos/odoo/odoo/subscribers","subscription_url":"https://api.github.com/repos/odoo/odoo/subscription","commits_url":"https://api.github.com/repos/odoo/odoo/commits{/sha}","git_commits_url":"https://api.github.com/repos/odoo/odoo/git/commits{/sha}","comments_url":"https://api.github.com/repos/odoo/odoo/comments{/number}","issue_comment_url":"https://api.github.com/repos/odoo/odoo/issues/comments{/number}","contents_url":"https://api.github.com/repos/odoo/odoo/contents/{+path}","compare_url":"https://api.github.com/repos/odoo/odoo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/odoo/odoo/merges","archive_url":"https://api.github.com/repos/odoo/odoo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/odoo/odoo/downloads","issues_url":"https://api.github.com/repos/odoo/odoo/issues{/number}","pulls_url":"https://api.github.com/repos/odoo/odoo/pulls{/number}","milestones_url":"https://api.github.com/repos/odoo/odoo/milestones{/number}","notifications_url":"https://api.github.com/repos/odoo/odoo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/odoo/odoo/labels{/name}","releases_url":"https://api.github.com/repos/odoo/odoo/releases{/id}","deployments_url":"https://api.github.com/repos/odoo/odoo/deployments","created_at":"2014-05-13T15:38:58Z","updated_at":"2018-09-25T06:43:26Z","pushed_at":"2018-09-25T08:51:08Z","git_url":"git://github.com/odoo/odoo.git","ssh_url":"git@github.com:odoo/odoo.git","clone_url":"https://github.com/odoo/odoo.git","svn_url":"https://github.com/odoo/odoo","homepage":"https://www.odoo.com","size":2210995,"stargazers_count":11185,"watchers_count":11185,"language":"Python","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8869,"mirror_url":null,"archived":false,"open_issues_count":1730,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":8869,"open_issues":1730,"watchers":11185,"default_branch":"11.0"}},"_links":{"self":{"href":"https://api.github.com/repos/odoo/odoo/pulls/27157"},"html":{"href":"https://github.com/odoo/odoo/pull/27157"},"issue":{"href":"https://api.github.com/repos/odoo/odoo/issues/27157"},"comments":{"href":"https://api.github.com/repos/odoo/odoo/issues/27157/comments"},"review_comments":{"href":"https://api.github.com/repos/odoo/odoo/pulls/27157/comments"},"review_comment":{"href":"https://api.github.com/repos/odoo/odoo/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/odoo/odoo/pulls/27157/commits"},"statuses":{"href":"https://api.github.com/repos/odoo/odoo/statuses/e07853953029b2f564097ba4023af2e7e8a9bf98"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"rco-odoo"}}