位运算 权限控制

位运算权限

在这里插入图片描述

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值