Jhipster:对非管理员隐藏实体
Jhipster: hide entities from non-admin
你们好java潮人!
我刚刚生成了一个 jhipster 项目并创建了一些实体。我想通过将它们限制为仅管理员用户来隐藏某些实体。我如何实现这一目标?
谢谢!
先阅读Spring Security doc再看你的项目源码是JHipster生成的:里面全是这样的例子,注意:
SecurityConfiguration.java
@Secured(AuthoritiesConstants.ADMIN)
在 UserResource.java
然后对于 angular 部分,您可以在状态定义中添加对管理员角色的要求,如 src/main/webapp/app/admin/configuration/configuration.state.js
(搜索 for authorities: ['ROLE_ADMIN']
)。因此对于 bank-account
实体,主要状态将在 src/main/webapp/app/entities/bank-account/bank-account.state.js
.
中定义
这是给 JHipster 的 3.x
我只是描述了我是如何在更新版本 (JHipster 4.7.0) 上阻止新实体 ("folder") 的:
为了阻止对端点的访问,我在文件中添加了新行:src/main/java/package path/config/SecurityConfiguration.java:
.antMatchers("/api/profile-info").permitAll()
.antMatchers("/api/folders").hasAuthority(AuthoritiesConstants.ADMIN) //new line
.antMatchers("/api/**").authenticated()
更改src/main/webapp/app/entities/folder/folder.route.ts:
data: {
authorities: ['ROLE_USER'], // old
authorities: ['ROLE_ADMIN'],// new
pageTitle: 'jmediaApp.folder.home.title'
},
要从导航栏中隐藏项目,您需要在 /src/main/webapp/app/layouts/navbar/navbar.component.html 的 <li>
标签中添加 *jhiHasAnyAuthority="'ROLE_ADMIN'"
:
<li *jhiHasAnyAuthority="'ROLE_ADMIN'">
在网关上 UI 通过使用 react.js 服务器可以遵循以下过程。
- 打开
src/main/webapp/app/app.tsx
,其中包含所有路由机制。检查组件 <Header ..{additional props added}.. />
- 在
mapStateToProps
上有一个名为 isAdmin
的函数,用于检查登录用户是否为管理员。 (根据您的角色更改此设置。我正在使用 ROLE_ADMIN,所以我保持原样。)
- 转到
src/main/webapp/app/shared/layout/header/header.tsx
。此文件包含 <EntitiesMenu >
组件下实体的所有导航。将 isAdmin 道具作为 <EntitiesMenu admin={props.isAdmin} />
传递给 EntitiesMenu 组件
现在转到src/main/webapp/app/shared/layout/menus/entities.tsx
将各自的路径更改为
{<br>
props.isAdmin && (
<MenuItem icon="asterisk" to="/entity/institute">
<翻译内容Key="global.menu.entities.institute"
/>
</菜单项>)
}
这有助于隐藏导航链接。
- 但是如果用户在浏览器上输入特定路径url,则没有验证。因此,将
src/main/webapp/app/entities/index.tsx
从 <ErrorBoundaryRoute ../>
更改为
<PrivateRoute path={
${match.url}/研究所} component={Institute} hasAnyAuthorities={[AUTHORITIES.ADMIN]} />
在此之后,即使用户通过在浏览器搜索栏中提及它来打开 URL,Jhipster 也会验证用户是否已获得该角色。如果不是简单的拒绝访问页面将被显示。
你们好java潮人!
我刚刚生成了一个 jhipster 项目并创建了一些实体。我想通过将它们限制为仅管理员用户来隐藏某些实体。我如何实现这一目标?
谢谢!
先阅读Spring Security doc再看你的项目源码是JHipster生成的:里面全是这样的例子,注意:
SecurityConfiguration.java
@Secured(AuthoritiesConstants.ADMIN)
在UserResource.java
然后对于 angular 部分,您可以在状态定义中添加对管理员角色的要求,如 src/main/webapp/app/admin/configuration/configuration.state.js
(搜索 for authorities: ['ROLE_ADMIN']
)。因此对于 bank-account
实体,主要状态将在 src/main/webapp/app/entities/bank-account/bank-account.state.js
.
这是给 JHipster 的 3.x
我只是描述了我是如何在更新版本 (JHipster 4.7.0) 上阻止新实体 ("folder") 的:
为了阻止对端点的访问,我在文件中添加了新行:src/main/java/package path/config/SecurityConfiguration.java:
.antMatchers("/api/profile-info").permitAll()
.antMatchers("/api/folders").hasAuthority(AuthoritiesConstants.ADMIN) //new line
.antMatchers("/api/**").authenticated()
更改src/main/webapp/app/entities/folder/folder.route.ts:
data: {
authorities: ['ROLE_USER'], // old
authorities: ['ROLE_ADMIN'],// new
pageTitle: 'jmediaApp.folder.home.title'
},
要从导航栏中隐藏项目,您需要在 /src/main/webapp/app/layouts/navbar/navbar.component.html 的 <li>
标签中添加 *jhiHasAnyAuthority="'ROLE_ADMIN'"
:
<li *jhiHasAnyAuthority="'ROLE_ADMIN'">
在网关上 UI 通过使用 react.js 服务器可以遵循以下过程。
- 打开
src/main/webapp/app/app.tsx
,其中包含所有路由机制。检查组件<Header ..{additional props added}.. />
- 在
mapStateToProps
上有一个名为isAdmin
的函数,用于检查登录用户是否为管理员。 (根据您的角色更改此设置。我正在使用 ROLE_ADMIN,所以我保持原样。) - 转到
src/main/webapp/app/shared/layout/header/header.tsx
。此文件包含<EntitiesMenu >
组件下实体的所有导航。将 isAdmin 道具作为<EntitiesMenu admin={props.isAdmin} />
传递给 EntitiesMenu 组件
现在转到
src/main/webapp/app/shared/layout/menus/entities.tsx
将各自的路径更改为{<br> props.isAdmin && ( <MenuItem icon="asterisk" to="/entity/institute"> <翻译内容Key="global.menu.entities.institute" /> </菜单项>) }
这有助于隐藏导航链接。- 但是如果用户在浏览器上输入特定路径url,则没有验证。因此,将
src/main/webapp/app/entities/index.tsx
从<ErrorBoundaryRoute ../>
更改为
<PrivateRoute path={
${match.url}/研究所} component={Institute} hasAnyAuthorities={[AUTHORITIES.ADMIN]} />
在此之后,即使用户通过在浏览器搜索栏中提及它来打开 URL,Jhipster 也会验证用户是否已获得该角色。如果不是简单的拒绝访问页面将被显示。