![](/img/trans.png)
[英]Firebase Rules: Problem with role based authentication in groups and .where()
[英]Where to add role based authentication to MeanJS app?
我有一个meanjs入门模板(带有yeoman生成器)。 在哪里可以向模块添加特定权限? 例如,
'use strict';
// Configuring the Articles module
angular.module('adminpanel').run(['Menus',
function(Menus) {
// Set top bar menu items
//Menus.addMenuItem('topbar', 'admin panel', 'adminpanel/', 'adminpanel');
Menus.addMenuItem('topbar', 'Admin Panel', 'adminpanel', 'dropdown', '/buildings(/create)?');
Menus.addSubMenuItem('topbar', 'adminpanel', 'List Collections', 'adminpanel/collections');
}
]);
这样的路线“严格”;
//Setting up route
angular.module('adminpanel').config(['$stateProvider',
function($stateProvider) {
// Adminpanels state routing
$stateProvider.
state('listCollections', {
url: '/adminpanel/collections',
templateUrl: 'modules/adminpanels/views/list-collections.client.view.html'
}).
state('showCollection', {
url: '/adminpanel/collections/:collectionName',
templateUrl: 'modules/adminpanels/views/show-collection.client.view.html'
}).
state('showCollectionItem', {
url: '/adminpanel/collections/:collectionName/:itemId',
templateUrl: 'modules/adminpanels/views/show-item.client.view.html'
});
}
]);
这些是在客户端添加基于角色的身份验证,在服务器端添加基于角色的身份验证的正确位置吗(我已经这样做了)?
有人知道如何在不破坏菜单的情况下向菜单(某些功能)添加选项吗?例如“ admin.hasPermission”? 关于这种事情有什么资源吗?
谢谢您的帮助!
我认为将身份验证,授权代码放在客户端和服务器端都是不正确的做法。 它们应仅在服务器端。
关键是,您必须在客户端中复制身份验证和授权代码,任何人都可以阅读您的机制来处理这些情况,一旦发现漏洞,服务器代码也将紧随其后。
我认为身份验证和授权逻辑应仅限于服务器端。 如果我要面对专业人士,那至少会使他的工作更加艰巨。
如果您坚持要求,则可以围绕$http
服务创建包装器,维护一个什么角色可以做什么的键值对,并确保所有AJAX请求都通过包装器服务,以检查是否应允许该请求。 如果是,则可以简单地使用$http
转发请求,否则,将引发错误。
不确定任何以前的版本,但是对于0.4.0版,客户端配置中有参数来控制可见性:
如果设置isPublic:false并添加一个角色数组,则可以设置可以看到菜单项的用户:
// Add the dropdown listCollentcions item
Menus.addSubMenuItem('topbar', 'adminpanel', {
title: 'listCollections',
isPublic: false,
roles:['admin'],
state: 'adminpanel.listCollections'
});
该实现位于核心模块(menu.client.services.js)中:
// A private function for rendering decision
var shouldRender = function(user) {
if (user) {
if (!!~this.roles.indexOf('*')) {
return true;
} else {
for (var userRoleIndex in user.roles) {
for (var roleIndex in this.roles) {
if (this.roles[roleIndex] === user.roles[userRoleIndex]) {
return true;
}
}
}
}
} else {
return this.isPublic;
}
return false;
};
也许您可以尝试使用0.4.0版或查看代码并尝试自行实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.