public
function
getAuth(
$name
,
$uid
,
$relation
='
or
') {
if
(!
$this
->_config['AUTH_ON'])
return
true;
$authList
=
$this
->getAuthList(
$uid
);
if
(
is_string
(
$name
)) {
if
(
strpos
(
$name
, ',') !== false) {
$name
=
explode
(',',
$name
);
}
else
{
$name
=
array
(
$name
);
}
}
foreach
(
$name
as
$key
=>
$val
){
if
(!
$this
->isExistsRule(
$val
)){
unset(
$name
[
$key
]);
}
}
if
(
count
(
$name
)==0){
return
true;
}
$list
=
array
();
foreach
(
$authList
as
$val
) {
if
(in_array(
$val
,
$name
))
$list
[] =
$val
;
}
if
(
$relation
=='
or
'
and
!
empty
(
$list
)) {
return
true;
}
$diff
=
array_diff
(
$name
,
$list
);
if
(
$relation
=='
and
'
and
empty
(
$diff
)) {
return
true;
}
return
false;
}
public
function
isExistsRule(
$name
){
static
$rule
=
array
();
if
(!
empty
(
$rule
[
$name
])){
return
$rule
[
$name
];
}
$rule
[
$name
] = M()->table(
$this
->_config['AUTH_RULE'])->where(
array
('name'=>
$name
))->
count
();
return
$rule
[
$name
];
}