位运算权限
package main
import (
"fmt"
)
type flag uint8
const (
r flag = 1 << iota
w
x
)
type User struct {
permission flag
name string
}
// 添加权限
func (u *User) Add(f flag) {
u.permission = u.permission | f
}
// 删除权限
func (u *User) Del(f flag) {
u.permission &^= f
}
// 更改权限(取反)
func (u *User) Chmod(f flag) {
u.permission ^= f
}
// 查看权限
func (u User) Check(f flag) bool {
return u.permission&f == f
}
func pt(user User) {
str := []string{"r", "w", "x"}
for i := 1; i <= 3; i++ {
fmt.Println(user.name, str[i-1], "-> ", user.Check(flag(i)))
}
fmt.Println("----------------")
}
func main() {
user := User{name: "root", permission: 0} //默认全false
user.Chmod(r | w | x)
user.Chmod(r | w | x)
user.Chmod(r | w)
pt(user)
user.Del(r | w)
user.Del(r)
pt(user)
user.Add(x)
pt(user)
fmt.Println(user.Check(x))
fmt.Println(user.Check(r))
}
enum e_Permission : byte
{
// Insert = 0b0001,//1
// Delete = 0b0010,//2
// Update = 0b0100,//4
// Select = 0b1000,//8
Insert = 1,
Delete = 2,
Update = 4,
Select = 8,
}
class Permissions
{
public static byte Addpermission(byte _perm, e_Permission _e_prem)
{
return _perm = (byte)(_perm | (byte)_e_prem);
}
public static byte Delpermission(byte _perm, e_Permission _e_prem)
{
return _perm = (byte)(_perm & (~(byte)_e_prem));
}
public static bool Check(byte _perm, e_Permission _e_prem)
{
return (byte)_e_prem == (byte)(_perm & (byte)_e_prem);
}
}
本文含有隐藏内容,请 开通VIP 后查看