通过清心醉

PHP开发之OPENCART多用户权限控制

由于使用OPENCART管理员的核心代码进行二次开发,很多时候用户的操作权限是很重要的,否则就会出现越权修改其他商家的产品等信息.

由于现在作者编写的是B2O2O的类型,暂时还在O2O的开发阶段(B2因为是多域名区分而已,一样需要多用户实现,所以先把重心放在O2O上用户数据的区分上)

作者昨天写了一个图片库区分的方法,该方法类似,主要针对于常用的产品及用户信息(后期B2整合O2O的时候还需要对分类进行划分,思路相同)权限区分功能.

1:用户的登陆数据表是唯一的,有独立的唯一性;

2:用户上传的产品末尾添加字段:product_laction_id; //

 

OPENCART判断用户是否登陆,其实是判断是否存在$this->session->data[‘user_id’]的参数值

session是一个对象,data是session对象内的一个数组.

在登陆之后,可自行创建新的参数值,比如作者创建的是:

$this->session->data[‘location_user_id’]

虽然值是相同的,但访问权限用任意一个就可以了

 

为什么呢? 因为OPENCART触发的页面都是以GET的方式获取,如果说你有很强大的前端工程师支撑你完全可以纯AJAX化.

具体是唯一,GET的时候,我们就必须要判断下用户的合法性了

假设有两个用户ID

ID1=100;

ID2=200;

/index.php?route=localisation/location&token=TQEAMbDBFvt6CmRbYszezUn9GmozQQjr&location_user_id=100

我们看上面的链接中,请求localisation里的location控制器,调用默认的index方法

token为OPENCART的加密权限方式,但只是用于区分用户是否已登陆

最后一个参数location_user_id=100;

就是打开控制器之后,根据GET的location_user_id的值,显示用户ID=100的商家信息

直接改200就变ID=200的商家信息了,就会受到恶意的修改.

方法:针对GET的location_user_id与$this->session->data[‘location_user_id’]判断,不存在即die();

不过建议,最好在执行模型SQL语句的时候强制执行.

不管UPDATE还是DELETE.统一WHERE user_id= ‘$location_user_id’;

 

关于作者

清心醉 administrator

发表评论

请输入验证码: