|
@@ -2,8 +2,9 @@ |
|
|
# Copyright (c) 2017, Frappe Technologies and Contributors |
|
|
# Copyright (c) 2017, Frappe Technologies and Contributors |
|
|
# See license.txt |
|
|
# See license.txt |
|
|
from __future__ import unicode_literals |
|
|
from __future__ import unicode_literals |
|
|
from frappe.core.doctype.user_permission.user_permission import add_user_permissions |
|
|
|
|
|
|
|
|
from frappe.core.doctype.user_permission.user_permission import add_user_permissions, remove_applicable |
|
|
from frappe.permissions import has_user_permission |
|
|
from frappe.permissions import has_user_permission |
|
|
|
|
|
from frappe.core.doctype.doctype.test_doctype import new_doctype |
|
|
|
|
|
|
|
|
import frappe |
|
|
import frappe |
|
|
import unittest |
|
|
import unittest |
|
@@ -17,6 +18,7 @@ class TestUserPermission(unittest.TestCase): |
|
|
'nested_doc_user@example.com')""") |
|
|
'nested_doc_user@example.com')""") |
|
|
frappe.delete_doc_if_exists("DocType", "Person") |
|
|
frappe.delete_doc_if_exists("DocType", "Person") |
|
|
frappe.db.sql_ddl("DROP TABLE IF EXISTS `tabPerson`") |
|
|
frappe.db.sql_ddl("DROP TABLE IF EXISTS `tabPerson`") |
|
|
|
|
|
frappe.db.sql_ddl("DROP TABLE IF EXISTS `tabDoc A`") |
|
|
|
|
|
|
|
|
def test_default_user_permission_validation(self): |
|
|
def test_default_user_permission_validation(self): |
|
|
user = create_user('test_default_permission@example.com') |
|
|
user = create_user('test_default_permission@example.com') |
|
@@ -153,6 +155,84 @@ class TestUserPermission(unittest.TestCase): |
|
|
self.assertTrue(has_user_permission(frappe.get_doc("Person", parent_record.name), user.name)) |
|
|
self.assertTrue(has_user_permission(frappe.get_doc("Person", parent_record.name), user.name)) |
|
|
self.assertFalse(has_user_permission(frappe.get_doc("Person", child_record.name), user.name)) |
|
|
self.assertFalse(has_user_permission(frappe.get_doc("Person", child_record.name), user.name)) |
|
|
|
|
|
|
|
|
|
|
|
def test_user_perm_on_new_doc_with_field_default(self): |
|
|
|
|
|
"""Test User Perm impact on frappe.new_doc. with *field* default value""" |
|
|
|
|
|
frappe.set_user('Administrator') |
|
|
|
|
|
user = create_user("new_doc_test@example.com", "Blogger") |
|
|
|
|
|
|
|
|
|
|
|
# make a doctype "Doc A" with 'doctype' link field and default value ToDo |
|
|
|
|
|
if not frappe.db.exists("DocType", "Doc A"): |
|
|
|
|
|
doc = new_doctype("Doc A", |
|
|
|
|
|
fields=[ |
|
|
|
|
|
{ |
|
|
|
|
|
"label": "DocType", |
|
|
|
|
|
"fieldname": "doc", |
|
|
|
|
|
"fieldtype": "Link", |
|
|
|
|
|
"options": "DocType", |
|
|
|
|
|
"default": "ToDo" |
|
|
|
|
|
} |
|
|
|
|
|
], unique=0) |
|
|
|
|
|
doc.insert() |
|
|
|
|
|
|
|
|
|
|
|
# make User Perm on DocType 'ToDo' in Assignment Rule (unrelated doctype) |
|
|
|
|
|
add_user_permissions(get_params(user, "DocType", "ToDo", applicable=["Assignment Rule"])) |
|
|
|
|
|
frappe.set_user("new_doc_test@example.com") |
|
|
|
|
|
|
|
|
|
|
|
new_doc = frappe.new_doc("Doc A") |
|
|
|
|
|
|
|
|
|
|
|
# User perm is created on ToDo but for doctype Assignment Rule only |
|
|
|
|
|
# it should not have impact on Doc A |
|
|
|
|
|
self.assertEquals(new_doc.doc, "ToDo") |
|
|
|
|
|
|
|
|
|
|
|
frappe.set_user('Administrator') |
|
|
|
|
|
remove_applicable(["Assignment Rule"], "new_doc_test@example.com", "DocType", "ToDo") |
|
|
|
|
|
|
|
|
|
|
|
def test_user_perm_on_new_doc_with_user_default(self): |
|
|
|
|
|
"""Test User Perm impact on frappe.new_doc. with *user* default value""" |
|
|
|
|
|
from frappe.core.doctype.session_default_settings.session_default_settings import (clear_session_defaults, |
|
|
|
|
|
set_session_default_values) |
|
|
|
|
|
|
|
|
|
|
|
frappe.set_user('Administrator') |
|
|
|
|
|
user = create_user("user_default_test@example.com", "Blogger") |
|
|
|
|
|
|
|
|
|
|
|
# make a doctype "Doc A" with 'doctype' link field |
|
|
|
|
|
if not frappe.db.exists("DocType", "Doc A"): |
|
|
|
|
|
doc = new_doctype("Doc A", |
|
|
|
|
|
fields=[ |
|
|
|
|
|
{ |
|
|
|
|
|
"label": "DocType", |
|
|
|
|
|
"fieldname": "doc", |
|
|
|
|
|
"fieldtype": "Link", |
|
|
|
|
|
"options": "DocType", |
|
|
|
|
|
} |
|
|
|
|
|
], unique=0) |
|
|
|
|
|
doc.insert() |
|
|
|
|
|
|
|
|
|
|
|
# create a 'DocType' session default field |
|
|
|
|
|
if not frappe.db.exists("Session Default", {"ref_doctype": "DocType"}): |
|
|
|
|
|
settings = frappe.get_single('Session Default Settings') |
|
|
|
|
|
settings.append("session_defaults", { |
|
|
|
|
|
"ref_doctype": "DocType" |
|
|
|
|
|
}) |
|
|
|
|
|
settings.save() |
|
|
|
|
|
|
|
|
|
|
|
# make User Perm on DocType 'ToDo' in Assignment Rule (unrelated doctype) |
|
|
|
|
|
add_user_permissions(get_params(user, "DocType", "ToDo", applicable=["Assignment Rule"])) |
|
|
|
|
|
|
|
|
|
|
|
# User default Doctype value is ToDo via Session Defaults |
|
|
|
|
|
frappe.set_user("user_default_test@example.com") |
|
|
|
|
|
set_session_default_values({"doctype": "ToDo"}) |
|
|
|
|
|
|
|
|
|
|
|
new_doc = frappe.new_doc("Doc A") |
|
|
|
|
|
|
|
|
|
|
|
# User perm is created on ToDo but for doctype Assignment Rule only |
|
|
|
|
|
# it should not have impact on Doc A |
|
|
|
|
|
self.assertEquals(new_doc.doc, "ToDo") |
|
|
|
|
|
|
|
|
|
|
|
frappe.set_user('Administrator') |
|
|
|
|
|
clear_session_defaults() |
|
|
|
|
|
remove_applicable(["Assignment Rule"], "user_default_test@example.com", "DocType", "ToDo") |
|
|
|
|
|
|
|
|
def create_user(email, *roles): |
|
|
def create_user(email, *roles): |
|
|
''' create user with role system manager ''' |
|
|
''' create user with role system manager ''' |
|
|
if frappe.db.exists('User', email): |
|
|
if frappe.db.exists('User', email): |
|
|