我在Angular 9中有一个网页。一些视图包含元素列表,我们可以单击一个图标并重定向到另一个在URL中传递ID的视图,以显示此元素的所有详细信息。这可能是一个安全错误,因为某些元素只能由某些角色查看,而其他角色则无法访问它们。实际上,所有角色都可以手动更改URL并访问所有元素。
我尝试防止手动更改URL,但是找不到正确的方法。
有人知道我如何忽略手动的URL更改?
答案 0 :(得分:0)
此处的正确方法是在 boolean flag=true;
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();
SessionFactory factory=meta.getSessionFactoryBuilder().build();
Session session=factory.openSession();
org.hibernate.Transaction t=session.beginTransaction();
session.save(obj1);
t.commit();
System.out.println(" details saved check database...);
return flag;
}
中使用Guard
和CanActivate。您必须实现app-routing.module.ts
来检查用户role-based Guard
,并基于该允许用户或阻止其访问特定路径。最好的方法是如果使用Authorizations
ob服务器端应用程序,则根据用户Roles
中存储的数据检查Access Permissions
和Token
。
因此,通过这种方式,如果用户无权访问JWT
或Component
,则您的path
会阻止他访问,并可以重定向到特定的{{ 1}},即使他/她手动更改了Guard
。
有关更多信息,请参见以下有用的文章: Router Guards
答案 1 :(得分:0)
您的问题有一个答案,还有其他考虑事项。
其他考虑事项
另一个考虑因素是,用户可以导航到URL,而无论您是否向他们提供自然导航的选项。换句话说,我不需要链接就可以实际输入给定的网址,例如
www.ishouldnotbeabletoaccessthisforexample.com
因此,为了解决这个问题,您必须实现一些routing guards来评估是否可以访问/加载/激活url(取决于您的目的和实现)。因此,例如,CanActivate所做的就是,当您尝试访问URL时,它将评估您在此CanActivate方法中设置的条件。如果返回true,则可以访问url及其内容。如果评估结果为假,则您将无法访问其内容。您也可以选择在此处重定向它们。因此,无论下面的答案如何,您都应该执行该操作。
回答您的问题
最简单的解决方案是根据您设置的授权条件过滤URL列表。
例如:
accessLevel = 0;
listOfUrls = [
{url: 'www.example.com/canVisitHere', accessLevel: 0},
{url: 'www.example.com/admin/cantVisitHere', accessLevel: 1}
] as ILink[]; // In this example, ILink is a simple interface, built by you requiring url, and accessLevel. Maybe optional? text or icon also.
// Constructor or wherever you want to evaluate your URLS
constructor() {
this.accessLevel = this.getAccessLevel(); // Or use subject instead
this.listOfUrls = this.listOfUrls.filter(x => x.accessLevel <= this.accessLevel); // If using a subject above, place this logic inside of your subscribe response
}
这甚至会阻止无法访问的链接首先显示在页面上,从可用性/ UX的角度来看,这是您应该做的。