Angularjs 处理许多不同类型的角色和数据检索
请注意,我在后端使用了Laravel。假设在一个任务管理系统中有10个不同的用户级别。所有这些用户级别对任务本身以及每个任务的实际属性具有不同的访问权限。例如,超级管理员可以查看所有任务,经理也可以。但是管理器只能看到这些任务的属性的某个子集。另一方面,普通人只能看到自己的任务,以及属性的不同子集 你会用什么样的设计模式或方法来处理这样的事情?对于每个用户级别,它都是不同的,我试图避免在任何地方都添加switch语句。对于简单的事情,这是完全好的。但当它无处不在时,它就像一种代码气味Angularjs 处理许多不同类型的角色和数据检索,angularjs,laravel,design-patterns,logic,fetching-strategy,Angularjs,Laravel,Design Patterns,Logic,Fetching Strategy,请注意,我在后端使用了Laravel。假设在一个任务管理系统中有10个不同的用户级别。所有这些用户级别对任务本身以及每个任务的实际属性具有不同的访问权限。例如,超级管理员可以查看所有任务,经理也可以。但是管理器只能看到这些任务的属性的某个子集。另一方面,普通人只能看到自己的任务,以及属性的不同子集 你会用什么样的设计模式或方法来处理这样的事情?对于每个用户级别,它都是不同的,我试图避免在任何地方都添加switch语句。对于简单的事情,这是完全好的。但当它无处不在时,它就像一种代码气味 这基本上就
这基本上就是我想找到一个好的解决方案。我还将返回一个数组到视图中,但是根据用户级别的不同,数组将填充不同的信息集。我试图限制发送的数据,即使它没有显示,因为我在前面使用Angular。因此,检查这些数据的响应非常简单。我会考虑使用类似于此项目的东西: 根据文件: 权限通过使用简单的概念来决定谁可以访问路由,从而帮助您获得对路由的控制。我已经看过很多关于访问控制实现的大型教程,它们可能会让人不知所措。所以我给大家带来了一个简单、强大、直截了当的解决方案 下面是一个简单的示例,说明如何在Angular中实现它: 定义权限: 定义角色: 路线的使用情况: 视图中的用法:
恭喜!您已登录。
我会考虑使用类似于此项目的东西:
根据文件:
权限通过使用简单的概念来决定谁可以访问路由,从而帮助您获得对路由的控制。我已经看过很多关于访问控制实现的大型教程,它们可能会让人不知所措。所以我给大家带来了一个简单、强大、直截了当的解决方案
下面是一个简单的示例,说明如何在Angular中实现它:
定义权限:
定义角色:
路线的使用情况:
视图中的用法:
恭喜!您已登录。
angular.module('barModule', ['permission', 'user'])
.run(function (PermissionStore, User, $q) {
PermissionStore
// Define user permission calling back-end
.definePermission('user', function (stateParams) {
// This time we will return a promise
// If the promise *resolves* then the user has the permission, if it *rejects* (you guessed it)
// Let's assume this returns a promise that resolves or rejects if session is active
return User.checkSession();
})
PermissionStore
// A different example for admin
.definePermission('admin', function (stateParams) {
var deferred = $q.defer();
User.getAccessLevel()
.then(function (data) {
if (data.accessLevel === 'admin') {
deferred.resolve();
} else {
deferred.reject();
}
}
.catch(function () {
// Error with request
deferred.reject();
});
return deferred.promise;
});
});
angular
.module('fooModule', ['permission', 'user'])
.run(function (RoleStore, User) {
RoleStore
// Permission array validated role
// Library will internally validate if 'user' and 'editor' permissions are valid when checking if role is valid
.defineRole('admin', ['user', 'editor']);
RoleStore
// Server side validated role
.defineRole('accountant', [], function (stateParams) {
// Let's assume that we are making a request to server here and return response as promise
return User.hasRole('accountant');
});
});
$stateProvider
.state('dashboard', {
url: '...',
data: {
permissions: {
except: ['anonymous'],
redirectTo: 'login'
}
}
});
<div permission only="'loggedIn'">
<span>Congrats! You are logged in.</span>
</div>