Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
4257dbfe
Commit
4257dbfe
authored
Jun 19, 2010
by
Hanno Schlichting
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Deal with circular import problems and do some real deprecation
parent
d561f077
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
553 additions
and
563 deletions
+553
-563
src/AccessControl/AccessControl.txt
src/AccessControl/AccessControl.txt
+1
-33
src/AccessControl/Role.py
src/AccessControl/Role.py
+19
-505
src/AccessControl/User.py
src/AccessControl/User.py
+12
-10
src/AccessControl/rolemanager.py
src/AccessControl/rolemanager.py
+506
-0
src/AccessControl/tests/testRole.py
src/AccessControl/tests/testRole.py
+1
-1
src/App/Permission.py
src/App/Permission.py
+1
-1
src/OFS/DTMLMethod.py
src/OFS/DTMLMethod.py
+1
-1
src/OFS/Folder.py
src/OFS/Folder.py
+1
-1
src/OFS/Image.py
src/OFS/Image.py
+1
-1
src/OFS/SimpleItem.py
src/OFS/SimpleItem.py
+1
-1
src/OFS/role.py
src/OFS/role.py
+2
-2
src/Products/ExternalMethod/ExternalMethod.py
src/Products/ExternalMethod/ExternalMethod.py
+1
-1
src/Products/MailHost/MailHost.py
src/Products/MailHost/MailHost.py
+1
-1
src/Products/Sessions/BrowserIdManager.py
src/Products/Sessions/BrowserIdManager.py
+1
-1
src/Products/Sessions/SessionDataManager.py
src/Products/Sessions/SessionDataManager.py
+1
-1
src/Shared/DC/ZRDB/Aqueduct.py
src/Shared/DC/ZRDB/Aqueduct.py
+1
-1
src/Shared/DC/ZRDB/Connection.py
src/Shared/DC/ZRDB/Connection.py
+1
-1
src/Shared/DC/ZRDB/DA.py
src/Shared/DC/ZRDB/DA.py
+1
-1
No files found.
src/AccessControl/AccessControl.txt
View file @
4257dbfe
...
@@ -165,10 +165,8 @@ Mail Host
...
@@ -165,10 +165,8 @@ Mail Host
o Change configuration
o Change configuration
To support the architecture, developers must derive an
To support the architecture, developers must derive an
object from the AccessControl.RoleManager mixin class,
object from the AccessControl.
rolemanager.Base
RoleManager mixin class,
and define in their class an __ac_permissions__ attribute.
and define in their class an __ac_permissions__ attribute.
This should be a tuple of tuples, where each tuple represents
This should be a tuple of tuples, where each tuple represents
...
@@ -191,8 +189,6 @@ Example:
...
@@ -191,8 +189,6 @@ Example:
('Delete properties', ['manage_delProperties']),
('Delete properties', ['manage_delProperties']),
('Default permission', ['']),
('Default permission', ['']),
)
)
The developer may also predefine useful types of access, by
The developer may also predefine useful types of access, by
specifying an __ac_types__ attribute. This should be a tuple of
specifying an __ac_types__ attribute. This should be a tuple of
...
@@ -214,8 +210,6 @@ Example:
...
@@ -214,8 +210,6 @@ Example:
)
)
Developers may also provide pre-defined role names that are
Developers may also provide pre-defined role names that are
not deletable via the interface by specifying an __ac_roles__
not deletable via the interface by specifying an __ac_roles__
attribute. This is probably not something we'll ever use under
attribute. This is probably not something we'll ever use under
...
@@ -224,29 +218,3 @@ the new architecture, but it's there if you need it.
...
@@ -224,29 +218,3 @@ the new architecture, but it's there if you need it.
Example:
Example:
__ac_roles__=('Manager', 'Anonymous')
__ac_roles__=('Manager', 'Anonymous')
src/AccessControl/Role.py
View file @
4257dbfe
This diff is collapsed.
Click to expand it.
src/AccessControl/User.py
View file @
4257dbfe
...
@@ -35,18 +35,20 @@ from App.Management import Navigation
...
@@ -35,18 +35,20 @@ from App.Management import Navigation
from
App.Management
import
Tabs
from
App.Management
import
Tabs
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
from
App.Dialogs
import
MessageDialog
from
App.Dialogs
import
MessageDialog
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
import
AuthEncoding
from
AccessControl
import
AuthEncoding
import
SpecialUsers
from
AccessControl
import
SpecialUsers
from
interfaces
import
IStandardUserFolder
from
.interfaces
import
IStandardUserFolder
from
requestmethod
import
requestmethod
from
.requestmethod
import
requestmethod
from
PermissionRole
import
_what_not_even_god_should_do
,
rolesForPermissionOn
from
.PermissionRole
import
_what_not_even_god_should_do
from
Role
import
RoleManager
,
DEFAULTMAXLISTUSERS
from
.PermissionRole
import
rolesForPermissionOn
from
SecurityManagement
import
getSecurityManager
from
.rolemanager
import
DEFAULTMAXLISTUSERS
from
SecurityManagement
import
newSecurityManager
from
.SecurityManagement
import
getSecurityManager
from
SecurityManagement
import
noSecurityManager
from
.SecurityManagement
import
newSecurityManager
from
ZopeSecurityPolicy
import
_noroles
from
.SecurityManagement
import
noSecurityManager
from
.ZopeSecurityPolicy
import
_noroles
_marker
=
[]
_marker
=
[]
...
...
src/AccessControl/rolemanager.py
0 → 100644
View file @
4257dbfe
This diff is collapsed.
Click to expand it.
src/AccessControl/tests/testRole.py
View file @
4257dbfe
...
@@ -5,7 +5,7 @@ class TestRoleManager(unittest.TestCase):
...
@@ -5,7 +5,7 @@ class TestRoleManager(unittest.TestCase):
def
test_interfaces
(
self
):
def
test_interfaces
(
self
):
from
AccessControl.interfaces
import
IRoleManager
from
AccessControl.interfaces
import
IRoleManager
from
AccessControl.
Role
import
BaseRoleManager
from
AccessControl.
rolemanager
import
BaseRoleManager
from
zope.interface.verify
import
verifyClass
from
zope.interface.verify
import
verifyClass
verifyClass
(
IRoleManager
,
BaseRoleManager
)
verifyClass
(
IRoleManager
,
BaseRoleManager
)
...
...
src/App/Permission.py
View file @
4257dbfe
...
@@ -15,9 +15,9 @@
...
@@ -15,9 +15,9 @@
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.Role
import
RoleManager
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
from
Persistence
import
Persistent
from
Persistence
import
Persistent
...
...
src/OFS/DTMLMethod.py
View file @
4257dbfe
...
@@ -16,7 +16,6 @@ from urllib import quote
...
@@ -16,7 +16,6 @@ from urllib import quote
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.Role
import
RoleManager
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
HTML
from
App.special_dtml
import
HTML
...
@@ -33,6 +32,7 @@ from DocumentTemplate.security import RestrictedDTML
...
@@ -33,6 +32,7 @@ from DocumentTemplate.security import RestrictedDTML
from
OFS.Cache
import
Cacheable
from
OFS.Cache
import
Cacheable
from
OFS.History
import
Historical
from
OFS.History
import
Historical
from
OFS.History
import
html_diff
from
OFS.History
import
html_diff
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item_w__name__
from
OFS.SimpleItem
import
Item_w__name__
from
OFS.ZDOM
import
ElementWithTitle
from
OFS.ZDOM
import
ElementWithTitle
from
webdav.Lockable
import
ResourceLockedError
from
webdav.Lockable
import
ResourceLockedError
...
...
src/OFS/Folder.py
View file @
4257dbfe
...
@@ -20,7 +20,6 @@ $Id$
...
@@ -20,7 +20,6 @@ $Id$
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.Permissions
import
add_page_templates
from
AccessControl.Permissions
import
add_page_templates
from
AccessControl.Permissions
import
add_user_folders
from
AccessControl.Permissions
import
add_user_folders
from
AccessControl.Role
import
RoleManager
from
AccessControl.SecurityManagement
import
getSecurityManager
from
AccessControl.SecurityManagement
import
getSecurityManager
from
AccessControl.unauthorized
import
Unauthorized
from
AccessControl.unauthorized
import
Unauthorized
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
...
@@ -31,6 +30,7 @@ from OFS.FindSupport import FindSupport
...
@@ -31,6 +30,7 @@ from OFS.FindSupport import FindSupport
from
OFS.interfaces
import
IFolder
from
OFS.interfaces
import
IFolder
from
OFS.ObjectManager
import
ObjectManager
from
OFS.ObjectManager
import
ObjectManager
from
OFS.PropertyManager
import
PropertyManager
from
OFS.PropertyManager
import
PropertyManager
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
...
...
src/OFS/Image.py
View file @
4257dbfe
...
@@ -25,7 +25,6 @@ from AccessControl.Permissions import view_management_screens
...
@@ -25,7 +25,6 @@ from AccessControl.Permissions import view_management_screens
from
AccessControl.Permissions
import
view
as
View
from
AccessControl.Permissions
import
view
as
View
from
AccessControl.Permissions
import
ftp_access
from
AccessControl.Permissions
import
ftp_access
from
AccessControl.Permissions
import
delete_objects
from
AccessControl.Permissions
import
delete_objects
from
AccessControl.Role
import
RoleManager
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
...
@@ -44,6 +43,7 @@ from zope.interface import implements
...
@@ -44,6 +43,7 @@ from zope.interface import implements
from
OFS.Cache
import
Cacheable
from
OFS.Cache
import
Cacheable
from
OFS.PropertyManager
import
PropertyManager
from
OFS.PropertyManager
import
PropertyManager
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item_w__name__
from
OFS.SimpleItem
import
Item_w__name__
from
zope.event
import
notify
from
zope.event
import
notify
...
...
src/OFS/SimpleItem.py
View file @
4257dbfe
...
@@ -30,7 +30,6 @@ from AccessControl.SecurityInfo import ClassSecurityInfo
...
@@ -30,7 +30,6 @@ from AccessControl.SecurityInfo import ClassSecurityInfo
from
AccessControl.SecurityManagement
import
getSecurityManager
from
AccessControl.SecurityManagement
import
getSecurityManager
from
AccessControl.Owned
import
Owned
from
AccessControl.Owned
import
Owned
from
AccessControl.Permissions
import
view
as
View
from
AccessControl.Permissions
import
view
as
View
from
AccessControl.Role
import
RoleManager
from
AccessControl.unauthorized
import
Unauthorized
from
AccessControl.unauthorized
import
Unauthorized
from
AccessControl.ZopeSecurityPolicy
import
getRoles
from
AccessControl.ZopeSecurityPolicy
import
getRoles
from
Acquisition
import
Acquired
from
Acquisition
import
Acquired
...
@@ -58,6 +57,7 @@ from OFS.interfaces import IItem
...
@@ -58,6 +57,7 @@ from OFS.interfaces import IItem
from
OFS.interfaces
import
IItemWithName
from
OFS.interfaces
import
IItemWithName
from
OFS.interfaces
import
ISimpleItem
from
OFS.interfaces
import
ISimpleItem
from
OFS.CopySupport
import
CopySource
from
OFS.CopySupport
import
CopySource
from
OFS.role
import
RoleManager
from
OFS.Traversable
import
Traversable
from
OFS.Traversable
import
Traversable
from
OFS.ZDOM
import
Element
from
OFS.ZDOM
import
Element
...
...
src/OFS/role.py
View file @
4257dbfe
...
@@ -19,8 +19,8 @@ from App.special_dtml import DTMLFile
...
@@ -19,8 +19,8 @@ from App.special_dtml import DTMLFile
from
AccessControl
import
ClassSecurityInfo
from
AccessControl
import
ClassSecurityInfo
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.
Role
import
BaseRoleManager
from
AccessControl.
rolemanager
import
BaseRoleManager
from
AccessControl.
Role
import
reqattr
from
AccessControl.
rolemanager
import
reqattr
from
AccessControl.Permission
import
Permission
from
AccessControl.Permission
import
Permission
from
AccessControl.Permissions
import
change_permissions
from
AccessControl.Permissions
import
change_permissions
from
AccessControl.requestmethod
import
requestmethod
from
AccessControl.requestmethod
import
requestmethod
...
...
src/Products/ExternalMethod/ExternalMethod.py
View file @
4257dbfe
...
@@ -26,7 +26,6 @@ from AccessControl.class_init import InitializeClass
...
@@ -26,7 +26,6 @@ from AccessControl.class_init import InitializeClass
from
AccessControl.Permissions
import
change_external_methods
from
AccessControl.Permissions
import
change_external_methods
from
AccessControl.Permissions
import
view_management_screens
from
AccessControl.Permissions
import
view_management_screens
from
AccessControl.Permissions
import
view
as
View
from
AccessControl.Permissions
import
view
as
View
from
AccessControl.Role
import
RoleManager
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
Acquisition
import
Acquired
from
Acquisition
import
Acquired
from
Acquisition
import
Explicit
from
Acquisition
import
Explicit
...
@@ -36,6 +35,7 @@ from App.Extensions import getPath
...
@@ -36,6 +35,7 @@ from App.Extensions import getPath
from
App.Extensions
import
FuncCode
from
App.Extensions
import
FuncCode
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
HTML
from
App.special_dtml
import
HTML
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
pretty_tb
from
OFS.SimpleItem
import
pretty_tb
from
Persistence
import
Persistent
from
Persistence
import
Persistent
...
...
src/Products/MailHost/MailHost.py
View file @
4257dbfe
...
@@ -40,11 +40,11 @@ from AccessControl.class_init import InitializeClass
...
@@ -40,11 +40,11 @@ from AccessControl.class_init import InitializeClass
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.Permissions
import
change_configuration
,
view
from
AccessControl.Permissions
import
change_configuration
,
view
from
AccessControl.Permissions
import
use_mailhost_services
from
AccessControl.Permissions
import
use_mailhost_services
from
AccessControl.Role
import
RoleManager
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
from
DateTime.DateTime
import
DateTime
from
DateTime.DateTime
import
DateTime
from
Persistence
import
Persistent
from
Persistence
import
Persistent
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
from
zope.interface
import
implements
from
zope.interface
import
implements
...
...
src/Products/Sessions/BrowserIdManager.py
View file @
4257dbfe
...
@@ -24,7 +24,6 @@ from urlparse import urlunparse
...
@@ -24,7 +24,6 @@ from urlparse import urlunparse
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.Owned
import
Owned
from
AccessControl.Owned
import
Owned
from
AccessControl.Role
import
RoleManager
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
from
Acquisition
import
aq_parent
from
Acquisition
import
aq_parent
...
@@ -33,6 +32,7 @@ from App.Management import Tabs
...
@@ -33,6 +32,7 @@ from App.Management import Tabs
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
from
Persistence
import
Persistent
from
Persistence
import
Persistent
from
persistent
import
TimeStamp
from
persistent
import
TimeStamp
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
from
ZPublisher.BeforeTraverse
import
registerBeforeTraverse
from
ZPublisher.BeforeTraverse
import
registerBeforeTraverse
from
ZPublisher.BeforeTraverse
import
unregisterBeforeTraverse
from
ZPublisher.BeforeTraverse
import
unregisterBeforeTraverse
...
...
src/Products/Sessions/SessionDataManager.py
View file @
4257dbfe
...
@@ -16,11 +16,11 @@ import sys
...
@@ -16,11 +16,11 @@ import sys
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.class_init
import
InitializeClass
from
AccessControl.Owned
import
Owned
from
AccessControl.Owned
import
Owned
from
AccessControl.Role
import
RoleManager
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
from
App.Management
import
Tabs
from
App.Management
import
Tabs
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
from
Persistence
import
Persistent
from
Persistence
import
Persistent
from
ZPublisher.BeforeTraverse
import
registerBeforeTraverse
from
ZPublisher.BeforeTraverse
import
registerBeforeTraverse
...
...
src/Shared/DC/ZRDB/Aqueduct.py
View file @
4257dbfe
...
@@ -21,12 +21,12 @@ import os
...
@@ -21,12 +21,12 @@ import os
import
re
import
re
import
string
import
string
from
AccessControl.Role
import
RoleManager
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
from
App.Common
import
package_home
from
App.Common
import
package_home
from
DateTime.DateTime
import
DateTime
from
DateTime.DateTime
import
DateTime
from
DocumentTemplate
import
File
from
DocumentTemplate
import
File
from
DocumentTemplate
import
HTML
from
DocumentTemplate
import
HTML
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
from
Persistence
import
Persistent
from
Persistence
import
Persistent
from
zExceptions
import
Redirect
from
zExceptions
import
Redirect
...
...
src/Shared/DC/ZRDB/Connection.py
View file @
4257dbfe
...
@@ -26,13 +26,13 @@ from AccessControl.Permissions import view_management_screens
...
@@ -26,13 +26,13 @@ from AccessControl.Permissions import view_management_screens
from
AccessControl.Permissions
import
change_database_connections
from
AccessControl.Permissions
import
change_database_connections
from
AccessControl.Permissions
import
test_database_connections
from
AccessControl.Permissions
import
test_database_connections
from
AccessControl.Permissions
import
open_close_database_connection
from
AccessControl.Permissions
import
open_close_database_connection
from
AccessControl.Role
import
RoleManager
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
from
App.Dialogs
import
MessageDialog
from
App.Dialogs
import
MessageDialog
from
App.special_dtml
import
DTMLFile
from
App.special_dtml
import
DTMLFile
from
DateTime.DateTime
import
DateTime
from
DateTime.DateTime
import
DateTime
from
DocumentTemplate
import
HTML
from
DocumentTemplate
import
HTML
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
from
Persistence
import
Persistent
from
Persistence
import
Persistent
from
zExceptions
import
BadRequest
from
zExceptions
import
BadRequest
...
...
src/Shared/DC/ZRDB/DA.py
View file @
4257dbfe
...
@@ -23,7 +23,6 @@ from AccessControl.class_init import InitializeClass
...
@@ -23,7 +23,6 @@ from AccessControl.class_init import InitializeClass
from
AccessControl.Permissions
import
change_database_methods
from
AccessControl.Permissions
import
change_database_methods
from
AccessControl.Permissions
import
use_database_methods
from
AccessControl.Permissions
import
use_database_methods
from
AccessControl.Permissions
import
view_management_screens
from
AccessControl.Permissions
import
view_management_screens
from
AccessControl.Role
import
RoleManager
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityInfo
import
ClassSecurityInfo
from
AccessControl.SecurityManagement
import
getSecurityManager
from
AccessControl.SecurityManagement
import
getSecurityManager
from
Acquisition
import
Implicit
from
Acquisition
import
Implicit
...
@@ -35,6 +34,7 @@ from DocumentTemplate.security import RestrictedDTML
...
@@ -35,6 +34,7 @@ from DocumentTemplate.security import RestrictedDTML
from
DateTime.DateTime
import
DateTime
from
DateTime.DateTime
import
DateTime
from
ExtensionClass
import
Base
from
ExtensionClass
import
Base
from
BTrees.OOBTree
import
OOBucket
as
Bucket
from
BTrees.OOBTree
import
OOBucket
as
Bucket
from
OFS.role
import
RoleManager
from
OFS.SimpleItem
import
Item
from
OFS.SimpleItem
import
Item
from
Persistence
import
Persistent
from
Persistence
import
Persistent
from
webdav.Resource
import
Resource
from
webdav.Resource
import
Resource
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment