运用简单工厂实现登陆权限的选择

        在敲机房收费系统重构版之间我们学习了设计模式,但是除了书上的实例外我们并没有再去深究这些东西,同时可敢肯定的是我们在刚学习设计模式的时候也不是很清楚每个具体的处理逻辑。就像我们之前学过的很多东西一样,只是先了解一下有这么个东西存在,以后用的时候再深究其中的原理。

在机房收费系统中用简单工厂或者是策略模式最好的地方其实是处理固定用户和临时用户结账下机的时候。不同级别的用户,按照不用的方式进行结算(写到这里不禁想起来没有接触设计模式之前还以为这根数据库的设计有关系)。

        下面是我在B层关于简单工厂的实现代码

Imports System.Windows.Forms
'定义一个基类
Public Class PermissionsSuper
    Public Overridable Sub ChooseP(ByVal menu1 As ToolStripMenuItem, ByVal menu2 As ToolStripMenuItem, ByVal menu3 As ToolStripMenuItem)
    End Sub
End Class

'一般用户类
Public Class ChooseGeneral
    Inherits PermissionsSuper
    Public Overrides Sub ChooseP(ByVal menu1 As ToolStripMenuItem, ByVal menu2 As ToolStripMenuItem, ByVal menu3 As ToolStripMenuItem)
        menu1.Enabled = True
        menu2.Enabled = False
        menu3.Enabled = False
    End Sub
End Class

'操作员,管理员类似一般用户
Public Class ChooseOperator   

'权限工厂
Public Class PermissionsFactory
    Public Shared Function ChoosePermissions(ByVal LoginUserLevel As String) As PermissionsSuper
        Dim ps As PermissionsSuper = Nothing
        Select Case (LoginUserLevel)
            Case "一般用户"
                ps = New ChooseGeneral()
                Exit Select
            Case "操作员"
                ps = New ChooseOperator()
                Exit Select
            Case "管理员"
                ps = New ChooseManager()
                Exit Select
        End Select
        Return ps
    End Function
End Class

下面是U层中实现的代码:

 '定义并赋值菜单栏变量
        Dim menu1, menu2, menu3 As ToolStripItem
        menu1 = GeneralUser
        menu2 = OperatingUser
        menu3 = ManagerUser

        '定义一个变量获得用户级别
        Dim LoginUserLevel As String = UserLevel

        '在权限工厂中选在要调用的子工场
        Dim pSuper As RechargeBLL.PermissionsSuper
        pSuper = RechargeBLL.PermissionsFactory.ChoosePermissions(LoginUserLevel)

        '执行子工厂
        Call pSuper.ChooseP(menu1, menu2, menu3)

说实话除了策略模式由于看过“永和收银系统(真的很强大,维护该系统压力不小啊)”后台的配置管理,抽象工厂加反射外其他的模式现在还体会不了它们的伟大之处。反倒是觉得加上设计模式后,系统的实现变得复杂了,就在这个登录时的权限选择,其实用If.....elseif.....或者select case实现起来要方便得多。
        可能关于面向对象、设计模式的各种好处听了很多,但是由于在实际的学习过程中还没有遇到具体的问题,所以实际的感受也只有麻烦了。知道某个知识点容易,理解起来还是要费些精力;且学且感悟!


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 44
    评论
Java实现后端登录权限可以通过以下步骤实现: 1. 创建用户表,包括用户ID、用户名、密码、角色等字段。 2. 在登录页面输入用户名和密码,提交表单。 3. 后端通过用户名和密码查询用户表,验证用户是否存在。 4. 如果用户存在,通过用户ID查询用户角色信息。 5. 根据用户角色信息判断用户是否有权限访问当前页面或操作。 6. 如果有权限,则跳转到目标页面;如果没有权限,则返回错误提示信息。 以下是一个示例代码,用于实现后端登录权限: ```java // 验证用户登录 @RequestMapping(value="/login", method=RequestMethod.POST) public String login(@RequestParam("username") String username, @RequestParam("password") String password, HttpSession session) { // 查询用户信息 User user = userService.getUserByUsername(username); if (user == null) { return "redirect:/login?error=1"; } // 验证密码 if (!user.getPassword().equals(password)) { return "redirect:/login?error=2"; } // 记录用户登录信息 session.setAttribute("userId", user.getId()); session.setAttribute("username", user.getUsername()); session.setAttribute("role", user.getRole()); // 跳转到首页 return "redirect:/home"; } // 验证用户权限 @RequestMapping(value="/order", method=RequestMethod.GET) public String showOrderList(HttpSession session) { // 判断用户角色 String role = (String) session.getAttribute("role"); if (!"admin".equals(role)) { return "redirect:/login?error=3"; } // 显示订单列表 List<Order> orderList = orderService.getOrderList(); return "orderList"; } ``` 在上述代码中,我们首先通过用户名和密码查询用户信息,并验证用户密码是否正确。如果验证通过,我们将记录用户登录信息,并在后续请求中验证用户角色信息,以判断用户是否有权限访问当前页面或操作。如果用户没有权限,则将跳转到登录页面,并返回错误提示信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值