You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/oaf/src/auth/index.ts

74 lines
1.5 KiB
TypeScript

import {modelsSimpleAuth} from '@/models'
export const R = {
// 应用管理配置权限
App: 'app',
// 用户管理和绑定应用权限
User: 'user',
// 权限资源定义权限
Resource: 'resource',
// 角色管理和绑定用户权限
Role: 'role',
// 权限管理和绑定角色权限
Auth: 'auth',
}
const level = {
None: 0,
Do: 1,
Part: 1,
Read: 2,
Create: 3,
Update: 4,
Delete: 5,
All: 6
}
class authLevel {
level = level.None
constructor(level: number) {
this.level = level
}
CanDo(): boolean {
return this.level >= level.Do
}
CanRead(): boolean {
return this.level >= level.Read
}
CanCreate(): boolean {
return this.level >= level.Create
}
CanUpdate(): boolean {
return this.level >= level.Update
}
CanDelete(): boolean {
return this.level >= level.Delete
}
CanDoAny(): boolean {
return this.level >= level.All
}
}
export class Auths {
private readonly list: modelsSimpleAuth[]
constructor(auths: modelsSimpleAuth[]) {
this.list = auths
}
Get(rid: string, ruid: string): authLevel {
let l = level.None
for (let i of this.list) {
if (i.RID == rid && (i.RUID === '' || i.RUID === ruid) && i.Level > l) {
l = i.Level
}
}
return new authLevel(l)
}
}
export function NewAuths(a: modelsSimpleAuth[]) {
return new Auths(a)
}