十三、权限认证 1、首先分析权限认证如何实现,首先实现管理员可以登录到后台,针对所有控制器下的方法都进行判断是否已经登录,判断所有的方法用户是否具备访问的权限,如果登录的是超级管理员将跳过验证,直接给予所有权限,普通用户的判断通过获取该用户拥有的所有权限并放入一个数组中,并通过获取用户登录提交的URL地址中的控制器和方法名,与数组中的元素进行比较,如果存在则允许访问,如果不存在则说明没有权限。同时也应该根据不同用户的权限不同,显示出不同的导航菜单页面。超级管理员拥有所有权限并显示出所有的菜单信息,普通用户获取到其拥有的权限,并渲染模板文件。 2、首先实现管理员的登录,创建控制器及方法来显示模板。并修改模板文件中的css、js和图片的链接地址,使其排版正确。然后完成验证码的显示。创建生成验证码的方法,通过实例化TP自带的verify类,调用entry方法来显示验证码。如果严查开启了GD库但是验证码没有正常显示,可以在实例化类之前使用ob_clean方法来清除之前所有对的输出语句。 3、然后修改模板文件,实现验证码图片的输出,图片的地址使用U函数生成。并为验证码添加事件,点击更换验证码。通过JavaScript标签添加事件,可以在验证码的URL地址中,添加时间戳或者添加随机数来完成更换验证码功能。 4、然后实现后台的登录功能。在登录的控制器中增加判断,通过I函数中post提交过来的数据来验证登录的合法性。首先应该验证验证码是否正确,因为验证码一旦不正确,就没有必要判断用户名和密码的合法性,减少了连接数据库的操作,节省资源。如果验证码、用户名和密码的验证都通过后,实现跳转到首页。 5、防止用户直接输入URL的翻墙。首先控制器中增加一个构造方法,防止父类的构造方法被重写,所以应该在子类的构造方法找中手动调用父类的构造方法。然后增加判断,判断用户是否登录,如果没有登录给予用户提示并跳转到首页。 6、然后实现权限的认证,首先在公共控制器中定义一个数组变量,用来接收用户的信息,包括用户基本信息,角色ID,权限信息等。然后将当前用户的信息保存在属性中,并根据用户的ID获取对应的角色ID,同时将角色ID也保存到属性中。然后通过查询语句获取到用户的权限信息并验证。如果登录的用户是超级管理员将不进行权限的认证。将获取到的二维数组转化为一维数组,并根据权限ID获取到对应的权限信息。 7、将对应的模型、控制器和方法名进行拼接,然后获取到用户提交的URL地址,并进行对比,验证成功说明有权限访问该方法,反之则没有权限并提示。 8、完善权限验证,首先设置后台具备访问权限的默认地址,比如index/index index/top index/main index/menu,然后将变量赋值给导航菜单显示。实现首页中导航菜单的显示,将之前的权限信息的数组赋值给导航菜单显示。 9、权限认证调优。首先进行思路分析,在调优过程中,最多的就是对MySQL数据库的调优,能尽量避免就避免执行MySQL连接的操作,因为连接操作过多会造成服务器负担过重,用户越多则负担越大,所以应该尽量避免多次执行连接MySQL的操作。因此可以将要操作的语句存储在变量文件或者内存介质中。 10、具体实现的步骤为,当需要用户信息时,在李连杰数据库获取数据之前,先在文件中读取信息,读取到了就是直接使用,读取不到就连接数据库获取信息,同时将信息存储在文件中方便下次读取使用。当某个角色的权限信息发生变化时,需要将之前的所有用户的文件信息全部删除。 11、分析过后使用代码来实现以上操作。首先在公共控制器中获取文件中的信息,并根据获取到的数据判断是否要进行链接数据库的操作。将获取到的信息存储在属性中,并根据用户ID获取其角色信息,然后将成功读取到的信息重新写入文件,同时判断如果登录的是超级管理员将不需要验证权限。在修改权限信息后,需要删除之前的该用户下的所有文件,并重新写入。 十四、商品类型的管理1、首先创建相应的商品类型的数据表,然后实现类型的添加功能。由于类型的添加与角色的添加的功能相类似,可以将之前的角色的控制器复制粘贴为商品类型管理控制器。模型与视图文件同理也复制粘贴后改名使用。然后将控制器中的类名方法名改名为相应的商品管理。并将模型中验证字段和自动验证修改为类型名,验证方法为类型名不能为空且不能重复。然后修改视图文件中模板文件的字段。 2、完善对商品类型的增删改查操作,主要操作针对于修改之前复制过来的控制器、模板和视图文件名称的修改。将之前所有的Role修改为Type,同时将视图文件中的模板文件中字段修改为正常的商品类型。要注意,由于之前的角色方法中控制对超级管理员进行预留并不允许操作,但是商品类型管理不需要对ID进行控制,所以应该将之前所有对超级管理员的判断操作修改其判断条件。
|