SugarCRM如何检查控制器权限?
SugarController定义了一个实例变量$hasAccess,布尔值,默认为true。该实例变量指示使用者是否有执行摸个action的权限:
class SugarController{
/**
* This can be set from the application to tell us whether we have authorization to
* process the action. If this is set we will default to the noaccess view.
*/
public $hasAccess = true;
public function process(){
......
//check to ensure we have access to the module.
if($this->hasAccess){
... ...
}else{
$this->no_access();
}
}
}
$hasAccess的值在SugarApplication中设置,当SugarApplication::execute()执行时调用handleAccessControl()检查是否有授权:
class SugarApplication
{
var $controller = null; /**
* Perform execution of the application. This method is called from index2.php
*/
function execute(){
......
$this->controller = ControllerFactory::getController($module);
$this->preProcess();
......
} function preProcess(){
......
$this->handleAccessControl();
} /**
* Handles everything related to authorization.
*/
function handleAccessControl(){
if($GLOBALS['current_user']->isDeveloperForAnyModule())
return; if(!empty($_REQUEST['action']) && $_REQUEST['action']=="RetrieveEmail")
return; if (!is_admin($GLOBALS['current_user']) && !empty($GLOBALS['adminOnlyList'][$this->controller->module])
&& !empty($GLOBALS['adminOnlyList'][$this->controller->module]['all'])
&& (empty($GLOBALS['adminOnlyList'][$this->controller->module][$this->controller->action]) || $GLOBALS['adminOnlyList'][$this->controller->module][$this->controller->action] != 'allow')) {
$this->controller->hasAccess = false;
return;
} // Bug 20916 - Special case for check ACL access rights for Subpanel QuickCreates
if (isset($_POST['action']) && $_POST['action'] == 'SubpanelCreates') {
$actual_module = $_POST['target_module'];
if (!empty($GLOBALS['modListHeader']) && !in_array($actual_module,$GLOBALS['modListHeader'])) {
$this->controller->hasAccess = false;
}
return;
} if (!empty($GLOBALS['current_user']) && empty($GLOBALS['modListHeader']))
$GLOBALS['modListHeader'] = query_module_access_list($GLOBALS['current_user']); if (in_array($this->controller->module, $GLOBALS['modInvisList']) &&
((in_array('Activities', $GLOBALS['moduleList']) &&
in_array('Calendar',$GLOBALS['moduleList'])) &&
in_array($this->controller->module, $GLOBALS['modInvisListActivities']))
){
$this->controller->hasAccess = false;
return;
}
}
}
重点看一下对$GLOBALS['adminOnlyList']的判断。$GLOBALS['adminOnlyList']在inclue/modules.php中设置,指示哪些模块只有是管理员才有权限执行:
// index.php
// require_once('include/entryPoint.php')
// require_once('include/modules.php'); $adminOnlyList = array(
//module => list of actions (all says all actions are admin only)
//'Administration'=>array('all'=>1, 'SupportPortal'=>'allow'),
'Dropdown'=>array('all'=>1),
'Dynamic'=>array('all'=>1),
'DynamicFields'=>array('all'=>1),
'Currencies'=>array('all'=>1),
'EditCustomFields'=>array('all'=>1),
'FieldsMetaData'=>array('all'=>1),
'LabelEditor'=>array('all'=>1),
'ACL'=>array('all'=>1),
'ACLActions'=>array('all'=>1),
'ACLRoles'=>array('all'=>1),
'UpgradeWizard' => array('all' => 1),
'Studio' => array('all' => 1),
'Schedulers' => array('all' => 1),
);
SugarCRM如何检查控制器权限?的更多相关文章
- 安装帝国CMS遇到“修改php.ini,将:short_open_tag 设为 On”的解决方法+“建立目录不成功!请检查目录权限”问题
想用安装个帝国CMS来做个网站,于是下载了程序,上传到服务器上,但是在输入安装路径的时候却给出了如下图示: 您的PHP配置文件php.ini配置有问题,请按下面操作即可解决: 1.修改php.ini, ...
- 关于使用WeUI在IE中提示“font-face 未能完成 OpenType 嵌入权限检查。权限必须是可安装的。”的问题
@font-face是css3中定义字体的规则. 首先,在使用weui时,在Chrome.Firefox下没有问题,但是在IE下提示“font-face 未能完成 OpenType 嵌入权限检查.权限 ...
- 帝国CMS“建立目录不成功!请检查目录权限”的解决办法
初次安装帝国CMS就遇到了一个问题,在提交或者修改信息的时候提示“建立目录不成功!请检查目录权限”,无法生成页面.检查了文件夹的读写权限和用户访问权限,发现都一切正常.那么到底是哪里出错了呢? 其实是 ...
- 帝国cms“建立目录不成功,请检查目录权限”的解决方法
就这个看似简单的问题我折腾了两天,百度看产生这个问题的原因有很多也很宽泛,大部分说的是初始化内置数据,但我出现“建立目录不成功,请检查目录权限”的原因估计只有少部分人会遇到. 内置初始化数据是你上传文 ...
- Android权限安全(1)自定义,检查,使用权限
1.自定义权限: <!-- 定义自定义权限 --> <permission android:name="com.example.f6k5i8.checkpermission ...
- 定时检查SetUID 权限文件列表的脚本文件
[root@localhost ~]# find / -perm -4000 -o -perm -2000 > /root/suid.list #-perm安装权限査找.-4000对应的是Set ...
- Android 开发技巧 - Android 6.0 以上权限大坑和权限检查基类封装
简单介绍 关于运行时权限的说法,早在Google发布android 6.0的时候,大家也听得蛮多的.从用户的角度来讲,用户是受益方,更好的保护用户的意思,而对于开发者来说,无疑增加了工作量. 对于6. ...
- 权限检查联系人ProfileProvider
每日一贴,今天的内容关键字为权限检查 ProfileProvider继承自AbstractContyactsProvider. 源代码请自行下载 每日一道理 书籍好比一架梯子,它能引领人们登上 ...
- C语言,如何检查文件是否存在和权限的信息
按功能access,头文件io.h(linux通过使用unistd.h int access(const char *filename, int amode); amode參 ...
随机推荐
- Codeforces Round #476 (Div. 2) [Thanks, Telegram!] ABCDE
修仙场,没脑子,C边界判错一直在写mdzz..D根本没怎么想. 第二天起来想了想D这不是水题吗立马A了.看了看E一开始想分配问题后来发觉想岔了,只需要每次都把树最后分配的点移到最前面就好了. A. P ...
- 【dijkstra】【次短路】【fread】hdu6181 Two Paths
题意:给你一张简单无向图,问你1到n的次短路.注意,可以不是简单路径. 存个次短路板子,原理还是挺简单,直接看代码吧.然后这份代码还是个fread的示例用法. #include<cstdio&g ...
- MySort的后续学习
本周老师在课上布置的一个MySort的任务 在结合了老师的模板后,我在课上写出了如下代码: import java.util.*; public class MySort { public stati ...
- location和history
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 解决Eclipse建立Maven项目后无src/main/java资源文件夹的办法
建立好一个Maven项目后,如果Java Resources资源文件下没有src/main/java文件夹,并且在手动创建这个文件时提示“已存在文件”.这说明,在这个项目配置中已经有了src/main ...
- 【java】java中替换中括号[ ]操作
String aa ="[1,2,3]"; aa = aa.replaceAll("[\\[\\]]",""); 结果为 1,2,3
- jQuery:validate内置验证的使用
(1)required:true 必输字段(2)remote:"check.php" 使用ajax方法调用check.php验证输入值(3)email:true 必须输入正确格式的 ...
- Nios II uCLinux/Linux启动分析
1. 说明 本文采用的Linux源码版本来自Altera公司FTP.不考虑zImage生成的Compress过程.因为zImage是内核binary文件经过gzip 压缩,并在头部添加解压缩代码实现的 ...
- web.xml文件的作用及基本配置
Java的web工程中的web.xml文件有什么作用呢?它是每个web工程都必须的吗? 一个web中完全可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的. 那什么时候需要 ...
- C#程序输出信息到调试窗口的几种方式
网站项目: System.Diagnostics.Debug.WriteLine("aaa"); 控制项目:Console.WriteLine("bbb"); ...