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
d158105f
Commit
d158105f
authored
Jul 03, 2001
by
matt@zope.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Accelerated to go with Acquisition C api
parent
b65b818e
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
395 deletions
+33
-395
lib/python/AccessControl/PermissionRole.py
lib/python/AccessControl/PermissionRole.py
+8
-117
lib/python/AccessControl/ZopeSecurityPolicy.py
lib/python/AccessControl/ZopeSecurityPolicy.py
+4
-248
lib/python/AccessControl/cAccessControl.c
lib/python/AccessControl/cAccessControl.c
+21
-30
No files found.
lib/python/AccessControl/PermissionRole.py
View file @
d158105f
...
...
@@ -85,123 +85,14 @@
__doc__
=
'''Objects that implement Permission-based roles.
$Id: PermissionRole.py,v 1.9 2000/12/05 18:49:42 shane Exp $'''
__version__
=
'$Revision: 1.9 $'
[
11
:
-
2
]
import
sys
from
ExtensionClass
import
Base
import
string
name_trans
=
filter
(
lambda
c
,
an
=
string
.
letters
+
string
.
digits
+
'_'
:
c
not
in
an
,
map
(
chr
,
range
(
256
)))
name_trans
=
string
.
maketrans
(
string
.
join
(
name_trans
,
''
),
'_'
*
len
(
name_trans
))
def
rolesForPermissionOn
(
perm
,
object
,
default
=
(
'Manager'
,)):
"""Return the roles that have the given permission on the given object
"""
im
=
imPermissionRole
()
im
.
_p
=
'_'
+
string
.
translate
(
perm
,
name_trans
)
+
"_Permission"
im
.
_d
=
default
return
im
.
__of__
(
object
)
class
PermissionRole
(
Base
):
"""Implement permission-based roles.
Under normal circumstances, our __of__ method will be
called with an unwrapped object. The result will then be called
with a wrapped object, if the original object was wrapped.
To deal with this, we have to create an intermediate object.
"""
def
__init__
(
self
,
name
,
default
=
(
'Manager'
,)):
self
.
__name__
=
name
self
.
_p
=
'_'
+
string
.
translate
(
name
,
name_trans
)
+
"_Permission"
self
.
_d
=
default
def
__of__
(
self
,
parent
,
None
=
None
,
getattr
=
getattr
):
r
=
imPermissionRole
()
r
.
_p
=
self
.
_p
r
.
_pa
=
parent
r
.
_d
=
self
.
_d
p
=
getattr
(
parent
,
'aq_inner'
,
None
)
if
p
is
not
None
:
return
r
.
__of__
(
p
)
else
:
return
r
# This is used when a permission maps explicitly to no permission.
_what_not_even_god_should_do
=
[]
class
imPermissionRole
(
Base
):
"""Implement permission-based roles
"""
def
__of__
(
self
,
parent
,
tt
=
type
(()),
st
=
type
(
''
),
getattr
=
getattr
,
None
=
None
):
obj
=
parent
n
=
self
.
_p
r
=
None
while
1
:
if
hasattr
(
obj
,
n
):
roles
=
getattr
(
obj
,
n
)
if
roles
is
None
:
return
'Anonymous'
,
t
=
type
(
roles
)
if
t
is
tt
:
# If we get a tuple, then we don't acquire
if
r
is
None
:
return
roles
return
r
+
list
(
roles
)
if
t
is
st
:
# We found roles set to a name. Start over
# with the new permission name. If the permission
# name is '', then treat as private!
if
roles
:
if
roles
!=
n
:
n
=
roles
# If we find a name that is the same as the
# current name, we just ignore it.
roles
=
None
else
:
return
_what_not_even_god_should_do
elif
roles
:
if
r
is
None
:
r
=
list
(
roles
)
else
:
r
=
r
+
list
(
roles
)
obj
=
getattr
(
obj
,
'aq_inner'
,
None
)
if
obj
is
None
:
break
obj
=
obj
.
aq_parent
if
r
is
None
:
r
=
self
.
_d
return
r
# The following methods are needed in the unlikely case that an unwrapped
# object is accessed:
def
__getitem__
(
self
,
i
):
try
:
v
=
self
.
_v
except
:
v
=
self
.
_v
=
self
.
__of__
(
self
.
_pa
)
del
self
.
_pa
return
v
[
i
]
def
__len__
(
self
):
try
:
v
=
self
.
_v
except
:
v
=
self
.
_v
=
self
.
__of__
(
self
.
_pa
)
del
self
.
_pa
return
len
(
v
)
$Id: PermissionRole.py,v 1.10 2001/07/03 19:37:52 matt Exp $'''
__version__
=
'$Revision: 1.10 $'
[
11
:
-
2
]
import
cAccessControl
rolesForPermissionOn
=
cAccessControl
.
rolesForPermissionOn
PermissionRole
=
cAccessControl
.
PermissionRole
imPermisionRole
=
cAccessControl
.
imPermissionRole
_what_not_even_god_should_do
=
cAccessControl
.
_what_not_even_god_should_do
##############################################################################
# Test functions:
...
...
lib/python/AccessControl/ZopeSecurityPolicy.py
View file @
d158105f
This diff is collapsed.
Click to expand it.
lib/python/AccessControl/cAccessControl.c
View file @
d158105f
...
...
@@ -36,7 +36,7 @@
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
$Id: cAccessControl.c,v 1.
7 2001/07/03 12:52:56
matt Exp $
$Id: cAccessControl.c,v 1.
8 2001/07/03 19:37:52
matt Exp $
If you have questions regarding this software,
contact:
...
...
@@ -51,6 +51,7 @@
#include <stdio.h>
#include "ExtensionClass.h"
#include "Acquisition.h"
#define OBJECT(o) ((PyObject *) (o))
...
...
@@ -339,7 +340,6 @@ static PyExtensionClass imPermissionRoleType = {
*/
static
PyObject
*
Containers
=
NULL
;
static
PyObject
*
aq_base
=
NULL
;
static
PyObject
*
_noroles
=
NULL
;
static
PyObject
*
Unauthorized
=
NULL
;
static
PyObject
*
LOG
=
NULL
;
...
...
@@ -348,6 +348,7 @@ static PyObject *_what_not_even_god_should_do = NULL;
static
PyObject
*
Anonymous
=
NULL
;
static
PyObject
*
imPermissionRoleObj
=
NULL
;
static
PyObject
*
defaultPermission
=
NULL
;
static
PyObject
*
__roles__
=
NULL
;
/* --------------------------------------------------------------
** ZopeSecurityPolicy Methods
...
...
@@ -392,16 +393,9 @@ static int ZopeSecurityPolicy_setup(void) {
Py_DECREF
(
module
);
module
=
NULL
;
/*| from Acquisition import aq_base
*/
IMPORT
(
module
,
"Acquisition"
);
GETATTR
(
module
,
aq_base
);
Py_DECREF
(
module
);
module
=
NULL
;
defaultPermission
=
Py_BuildValue
(
"(s)"
,
"Manager"
);
_what_not_even_god_should_do
=
Py_BuildValue
(
"[]"
);
__roles__
=
PyString_FromString
(
"__roles__"
);
return
1
;
...
...
@@ -662,12 +656,12 @@ static PyObject *ZopeSecurityPolicy_validate(PyObject *self, PyObject *args) {
**| accessedbase = getattr(accessed, 'aq_base', container)
*/
containerbase
=
PyObject_CallFunction
(
aq_base
,
"O"
,
container
);
containerbase
=
aq_base
(
container
);
if
(
containerbase
==
NULL
)
goto
err
;
accessedbase
=
PyObject_GetAttrString
(
accessed
,
"aq_base"
);
if
(
accessedbase
==
NULL
)
{
PyErr_Clear
();
if
(
aq_isWrapper
(
accessed
))
accessedbase
=
aq_base
(
accessed
);
else
{
Py_INCREF
(
container
);
accessedbase
=
container
;
}
...
...
@@ -695,7 +689,7 @@ static PyObject *ZopeSecurityPolicy_validate(PyObject *self, PyObject *args) {
if
(
roles
==
NULL
||
roles
==
_noroles
)
{
Py_XDECREF
(
roles
);
roles
=
PyObject_GetAttr
String
(
value
,
"__roles__"
);
roles
=
PyObject_GetAttr
(
value
,
__roles__
);
if
(
roles
==
NULL
)
{
PyErr_Clear
();
Py_INCREF
(
_noroles
);
...
...
@@ -739,7 +733,7 @@ static PyObject *ZopeSecurityPolicy_validate(PyObject *self, PyObject *args) {
Py_XDECREF
(
roles
);
roles
=
PyObject_GetAttr
String
(
container
,
"__roles__"
);
roles
=
PyObject_GetAttr
(
container
,
__roles__
);
if
(
roles
==
NULL
)
{
PyErr_Clear
();
Py_INCREF
(
_noroles
);
...
...
@@ -747,11 +741,7 @@ static PyObject *ZopeSecurityPolicy_validate(PyObject *self, PyObject *args) {
}
if
(
roles
==
_noroles
)
{
PyObject
*
aq
;
aq
=
PyObject_GetAttrString
(
container
,
"aq_acquire"
);
if
(
aq
==
NULL
)
{
PyErr_Clear
();
if
(
aq_isWrapper
(
container
)
!=
1
)
{
Py_DECREF
(
roles
);
if
(
containerbase
!=
accessedbase
)
{
rval
=
PyInt_FromLong
(
0
);
...
...
@@ -762,10 +752,7 @@ static PyObject *ZopeSecurityPolicy_validate(PyObject *self, PyObject *args) {
roles
=
_noroles
;
}
else
{
Py_DECREF
(
roles
);
roles
=
PyObject_CallFunction
(
aq
,
"s"
,
"__roles__"
);
Py_DECREF
(
aq
);
aq
=
NULL
;
roles
=
aq_acquire
(
container
,
__roles__
);
if
(
roles
==
NULL
)
{
/* XXX not JUST AttributeError*/
/* XXX should we clear the error? */
...
...
@@ -1289,9 +1276,9 @@ static PyObject *PermissionRole_of(PermissionRole *self, PyObject *args) {
**| return r
*/
_p
=
PyObject_GetAttrString
(
parent
,
"aq_inner"
);
if
(
_p
)
{
if
(
aq_isWrapper
(
parent
))
{
_p
=
aq_inner
(
parent
);
result
=
PyObject_CallMethod
(
OBJECT
(
r
),
"__of__"
,
"O"
,
_p
);
Py_DECREF
(
_p
);
/* Dont need goto */
...
...
@@ -1503,13 +1490,15 @@ static PyObject *imPermissionRole_of(imPermissionRole *self, PyObject *args) {
**| obj = obj.aq_parent
*/
tobj
=
PyObject_GetAttrString
(
obj
,
"aq_inner"
);
if
(
aq_isWrapper
(
obj
)
<=
0
)
break
;
tobj
=
aq_inner
(
obj
);
if
(
tobj
==
NULL
)
break
;
Py_DECREF
(
obj
);
obj
=
tobj
;
if
(
obj
==
Py_None
)
break
;
tobj
=
PyObject_GetAttrString
(
obj
,
"aq_parent"
);
if
(
aq_isWrapper
(
obj
)
<=
0
)
break
;
tobj
=
aq_parent
(
obj
);
if
(
tobj
==
NULL
)
goto
err
;
Py_DECREF
(
obj
);
obj
=
tobj
;
...
...
@@ -1774,10 +1763,12 @@ static PyObject *permissionName(PyObject *name) {
PUBLIC
void
initcAccessControl
(
void
)
{
PyObject
*
module
;
PyObject
*
dict
;
char
*
rev
=
"$Revision: 1.
7
$"
;
char
*
rev
=
"$Revision: 1.
8
$"
;
if
(
!
ExtensionClassImported
)
return
;
aq_init
();
ZopeSecurityPolicyType
.
tp_getattro
=
(
getattrofunc
)
PyExtensionClassCAPI
->
getattro
;
...
...
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