创建基于角色的 Web 应用程序的最佳方法是什么?

2022-09-02 13:44:13

我需要为学校创建一个 Web 应用程序,并且我需要具有不同的角色,例如:

  • 学生
  • 教授
  • 管理

我需要在开始时登录,然后在输入凭据后,应用程序需要重定向到主页。

这里的问题是:我应该如何处理角色?我应该为每个角色设置一个命名空间吗?即:学生/索引.jsp,教授/索引.jsp,管理员/索引.jsp或为所有角色提供通用命名空间?像家/索引这样的东西.jsp?然后使用装饰器/复合模式使菜单根据角色具有不同的选项?

对于这个问题,我知道我必须存储用户和角色,每个都存储在它自己的表中,这个问题更相关,处理演示/导航/权限角色以及如何创建webapp结构,即在webapp文件夹下有一个名为学生的目录,另一个文件夹管理员,另一个学生和我上面提到的一点(装饰器或复合模式)

当然,我不是在制作一个如此小的应用程序,但我想简化我面临的问题,以便创建一个基于Web的大角色应用程序,我相信这些是主要原则。

感谢您的时间和帮助。


答案 1

您绝对不希望为不同的角色使用单独的页面(“命名空间”),因为这几乎不可避免地会导致代码重复。

您应该为每个功能设置一个页面,并根据用户的角色限制访问。(例如,某些菜单项对学生不可见,但对教授和管理员显示。

你绝对不应该尝试重新发明轮子来管理基于角色的权限,因为有经过战斗验证的框架:正如其他人已经指出的那样,在Java世界中,Spring和Spring Security是要走的路。

我认为JSP随着技术的发展而变得越来越老,所以你应该开始学习Angular

由于获得一个有效的Spring / Angular项目设置并非易事,我建议您使用JHipster应用程序生成器,该生成器通过向导指导您完成整个过程(您只需要回答一些问题 - 当被问及类型选择时):然后它会根据现代建议创建一个具有基于角色安全性的工作项目配置。monolithic web application

如果你想了解现代Web应用程序中正确的基于角色的访问控制,看看JHipster生成的应用程序中使用的解决方案是我认为最好和最快的解决方案:

  • 它使用Spring Security功能来限制Java后端中的调用:在生成的项目中查找注释的用法org.springframework.security.access.annotation.Secured
  • 显示了一些自定义前端技巧,用于根据角色显示/隐藏某些UI部分,例如:,您可以轻松地将其采用到自己的用例中。<h1 *jhiHasAnyAuthority="'ROLE_ADMIN'">Hello, admin user</h1>
  • 你可以在2分钟内完成一个工作项目:非常适合学习(去最简单的!monolithic web application

答案 2

我不确定我的解决方案是否适合您的问题。但在我的情况下,我这样做如下:

用户 0..n --- 0..m 角色

角色 0..n --- 0..m 特权

生产代码

在您的情况下,您可能需要:

  • Admin无法查看、编辑学生分数。
  • Student可以查看分数,但无法编辑。
  • Professor可以查看,编辑,添加分数。

您可以执行以下操作:

角色

  • ROLE_SCORE_EDITOR
  • ROLE_SCORE_VIEWER

特权

  • OP_READ_SCORE
  • OP_CREATE_SCORE
  • OP_UPDATE_SCORE
  • OP_DELETE_SCORE ---> 可能不需要这个,但对于一个例子来说已经足够了。

角色 - 权限

ROLE_SCORE_EDITOR

  • OP_READ_SCORE
  • OP_CREATE_SCORE
  • OP_UPDATE_SCORE

ROLE_SCORE_VIEWER

  • OP_READ_SCORE

用户 - 角色

管理员(这真的取决于你,在我的情况下,我应该把它留空)

教授

  • ROLE_SCORE_EDITOR

斯图登

  • ROLE_SCORE_VIEWER

然后在模板中,只需使用 或 保护视图即可。它会正常工作。user.hasPrivilegeuser.hasRole

P/s:抱歉我的英语不好。如果您需要任何东西,请在下面发表评论或评论我的要点


推荐