我对MEAN堆栈很新... 我正在构建的当前应用程序,我使用meanjs和yeoman来构建它。
我想要用户,我希望管理员管理这些用户(创建/删除用户,添加其他管理员)。 meanjs构建它的方式是:
roles: {
type: [{
type: String,
enum: ['user', 'admin']
}],
default: ['user']
我将'admin'添加到数组中。这是处理这个问题的好方法吗?还是有更安全的东西?
我面临的主要问题是我无法弄清楚如何保护某些路由仅限管理员。我知道这可以用angular和express / node完成,但我不知道如何实现。
我一直在谷歌搜索3天,我遇到了从头开始构建的人(看起来不像我当前的代码或文件夹结构),或者没有做任何类型的路由限制/授权/身份验证。我也查看过meanjs文档,根本没用。
任何建议,帮助,学习的地方都将不胜感激。
答案 0 :(得分:1)
如果你看一下MEAN.JS 0.4.0版本(主分支here),它已经在服务器和客户端都实现了路由限制。
正如您所提到的,用户架构可以有#include<stdio.h>
#include<stdlib.h>
struct Stack{
char data;
struct Stack *next;
};
void push(struct Stack **top,char data)
{
struct Stack *new_node;
if(*top==NULL)
{
new_node=malloc(sizeof(struct Stack));
new_node->data=data;
new_node->next=*top;
*top=new_node;
}
else
{
new_node=malloc(sizeof(struct Stack));
new_node->data=data;
new_node->next=*top;
*top=new_node;
}
}
char pop(struct Stack **top,int flag)
{
if(*top!=NULL && flag==0)
{
printf("\n Expression is In-Valid :) \n");
return '\0';
}
if(*top==NULL && flag ==1)
{
printf("\n Unbalanced Expression \n");
return '\0';
}
if(*top!=NULL && flag==1)
{
struct Stack *temp=*top;
char op;
op=(*top)->data;
*top=(*top)->next;
free(temp);
return op;
}
}
/*void display(struct Stack *top)
{
struct Stack *temp=top;
while(temp)
{
printf("\n %c",temp->data);
temp=temp->next;
}
} */
int main(void)
{
struct Stack *top=NULL;
int i=0;
char str[]="((A+B)+[C+D])",op;
printf("\n Running the programe to check if the string is balanced or not ");
for(i=0;str[i]!='\0';++i)
{
if(str[i]=='('||str[i]=='['||str[i]=='{'||str[i]=='<')
push(&top,str[i]);
else if(str[i]==')'||str[i]==']'||str[i]=='}'||str[i]=='>')
{
op=pop(&top,1);
if( (op=='('&&str[i]==')') || (op=='['&&str[i]==']') || (op=='{'&&str[i]=='}') || (op=='<'&&str[i]=='>'))
{
continue;
}
else
{
printf("\n The expression is un-balanced \n");
break;
}
}
}
pop(&top,0);
return 0;
}
和user
个角色。
关于服务器端,您将有一个admin
目录,其中包含指定允许哪些路由的js文件,同时考虑用户访问该路由所具有的角色。这些权限由名为node_acl的节点模块管理。您可以查看示例here。
关于客户端,当您为角度模块定义路由时(例如here,请注意某些路由中的policies
),这是检查是否允许用户访问的一种方法该路线是在用户前往特定路线时(或者换句话说,当事件data: {roles: ['user', 'admin']}
被触发时)检查他的角色,MEAN.JS正在file中发生。
您可能正在使用较早版本的MEAN.JS,但是如果您按照最新版本中的示例进行操作,则可以在应用中使用它。
答案 1 :(得分:0)
查看http://passportjs.org/进行身份验证。
Scotch.io有一个很好的教程,可用于设置模型和护照身份验证。 https://scotch.io/tutorials/easy-node-authentication-setup-and-local
在您的节点应用中设置Passport后,您可以使用中间件轻松保护Angular视图和API路由。
祝你好运!希望你发现阅读有用。